我正在为我的Web应用程序设置本地身份验证策略,而我打算实现它的方式也遇到了一些问题。
我已经阅读了Passport的文档,并看到了多个示例,但是我没有发现有关此特定问题的任何信息。首先,我知道Passport会寻找默认的req.body.username
和req.body.password
。我还知道,如果这些不是您希望传递的键的名称,则可以使用LocalStrategy
构造函数的第一个参数交换它们,如下所示:new LocalStrategy({ usernameField: 'otherUsername', passwordField: 'otherPassword' }, (username, password, done) => { ... })
我的问题是通过用户凭证的方式。从前端,我将用户的用户名和密码加密到正文中的单个对象中(我知道正文还是经过加密的,但是对我来说这是一个更高的级别),然后我希望在传递数据之前对数据进行操作到护照。
回顾一下,我以以下格式发送我的凭据:
req.body.login = {username: '...', password: '...'}
,然后解密登录对象,然后拉出用户名/密码属性以传递给通行证。这可能吗?我觉得应该这样做,如果不能使用本地策略,是否可以使用其他自定义策略来实现?
感谢您的帮助。谢谢!
答案 0 :(得分:0)
万一其他人偶然发现,我设法使用LocalStrategy的passReqToCallback
解决了我的问题。
在您的护照配置中,将此作为您的第一个参数传递给LocalStrategy,并将回调的第一个参数更新为req:new LocalStrategy({ passReqToCallback: true }, (req, dummyUsername, dummyPassword, done) => { ... }
您现在可以在该函数中访问请求对象,因此在我的情况下,我使用了我一直在寻找的东西传递的编码参数。
因为Passport仍在体内寻找用户名和密码,所以我从前端传入了伪值,因此Passport不会认为凭据丢失。