我正在将身份验证系统重写为仅使用 Passport JS 的 OAuth。我设计了如下所述的用户流程,但我看不出让 Passport 与原始请求中的信息进行交互的最佳点在哪里。
流程将是:
- 经过身份验证的用户向新用户的电子邮件地址发送邀请
- 新用户点击链接并登陆邀请页面 (/invitation/SOMECODE)
- 邀请码已验证,如果仍然有效,则允许用户通过 Google/Slack 进行身份验证
- 在策略中创建新的资料,但与现有公司相关联(而不是创建新公司)
我希望访问 Google 策略中的 req.params,因为这是我通常会为首次用户创建新个人资料和公司的点。但如果有邀请码,我想在此时查找该信息。
除了Node Passport invitation strategy之外,我看不到任何支持这种方法的文档。初始注册后使用密码。
您能否访问策略内的 req 对象,或者是否有更好的方法使用另一个中间件来处理此问题?
最佳答案
我认为您正在寻找的是passReqToCallback
文档示例:
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: "http://www.example.com/auth/twitter/callback",
passReqToCallback: true
},
function(req, token, tokenSecret, profile, done) {
if (!req.user) {
// Not logged-in. Authenticate based on Twitter account.
} else {
// Logged in. Associate Twitter account with user. Preserve the login
// state by supplying the existing user after association.
// return done(null, req.user);
}
}
));
请参阅文档中的passReqToCallback
:http://passportjs.org/docs/authorize
关于node.js - 使用 Passport JS 的邀请系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46838520/