Passport.js本地策略,但带有自定义标识参数



我正在为我的web应用程序设置本地身份验证策略,但我在实现它的方式上遇到了一些问题。

我已经阅读了Passport的文档,并看到了多个例子,但我没有找到任何关于我遇到的这个特定问题的信息。首先,我知道Passport会查找默认的req.body.usernamereq.body.password。我还知道,如果这些不是您想要传递的密钥的名称,您可以使用LocalStrategy构造函数的第一个参数来交换它们,如下所示:new LocalStrategy({ usernameField: 'otherUsername', passwordField: 'otherPassword' }, (username, password, done) => { ... })

我的问题在于我传递用户凭据的方式。在我的前端,我将用户的用户名和密码加密到主体中的一个对象中(我知道主体无论如何都会被加密,但这对我来说是一个额外的级别(,然后我希望在将数据传递给Passport之前对其进行操作。

因此,概括一下,我以以下格式发送我的凭据:

req.body.login = {username: '...', password: '...'}

然后解密登录对象,然后取出用户名/密码属性以传递给passport。这可能吗?我觉得这是应该的,如果本地策略不可能,我可以用另一个自定义策略来实现吗?

感谢您的帮助。谢谢

如果其他人偶然发现了这一点,我使用LocalStrategy的passReqToCallback解决了我的问题。

在passport配置中,将其作为第一个参数传递给LocalStrategy,并将回调的第一个参数更新为req:new LocalStrategy({ passReqToCallback: true }, (req, dummyUsername, dummyPassword, done) => { ... }

您现在可以访问该函数中的请求对象,所以在我的情况下,我使用了我传递的编码参数作为我要查找的东西。

因为Passport仍在正文中查找用户名和密码,所以我从前端传入了伪值,这样Passport就不会认为凭据丢失了。

最新更新