【问题标题】:Passport.js local strategy but with custom identification parametersPassport.js 本地策略,但带有自定义标识参数
【发布时间】:2019-05-17 04:22:30
【问题描述】:

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

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

我的问题在于我传递用户凭据的方式。从我的前端,我将用户的用户名和密码加密到正文中的单个对象中(我知道正文无论如何都会被加密,但这对我来说又是一个级别),然后我希望在传递数据之前操纵数据到护照。

回顾一下,我按以下格式发送我的凭据:

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

然后解密登录对象,然后将用户名/密码属性拉出来传递给护照。这可能吗?我觉得应该是这样,如果本地策略无法实现,我可以使用其他自定义策略来实施吗?

感谢任何帮助。谢谢!

【问题讨论】:

    标签: javascript node.js authentication passport.js


    【解决方案1】:

    万一其他人偶然发现这一点,我设法通过使用 LocalStrategy 的 passReqToCallback 解决了我的问题。

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

    您现在可以在该函数中访问请求对象,因此在我的例子中,我使用了我传递的编码参数作为我正在寻找的东西。

    因为 Passport 仍在正文中查找用户名和密码,所以我从前端传入了虚拟值,因此 Passport 不会认为缺少凭据。

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 2018-11-10
      • 2015-01-01
      • 1970-01-01
      • 2020-10-15
      • 2020-12-26
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多