node.js - 使用 Passport JS 的邀请系统

标签 node.js passport.js

我正在将身份验证系统重写为仅使用 Passport JS 的 OAuth。我设计了如下所述的用户流程,但我看不出让 Passport 与原始请求中的信息进行交互的最佳点在哪里。

流程将是:

  1. 经过身份验证的用户向新用户的电子邮件地址发送邀请
  2. 新用户点击链接并登陆邀请页面 (/invitation/SOMECODE)
  3. 邀请码已验证,如果仍然有效,则允许用户通过 Google/Slack 进行身份验证
  4. 在策略中创建新的资料,但与现有公司相关联(而不是创建新公司)

我希望访问 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/

相关文章:

javascript - 在新选项卡中渲染静态内容(express、ejs)

javascript - gulp main-bower-files 正则表达式过滤器不起作用

node.js - Node Express 和 Passport 记住我认证

javascript - Passport.js 在 req.login 上失败

typescript - 使用 passport.serializeUser 时如何修复 "No overload matches this call."错误?

javascript - 在两个 Javascript 文件之间共享常量值

node.js - 创建 NPM 包,如何记录它们?

node.js - Node/Mocha/Chai/Sinon - 异步等待单元测试错误

node.js - Passport and connect-flash : req. flash 不是函数

node.js - 使用 Passport 对 Facebook 进行身份验证不起作用