【问题标题】:How do I redirect from a passport.js authorize callback on success?如何从 passport.js 重定向成功后授权回调?
【发布时间】:2015-09-03 17:12:08
【问题描述】:

在我的 Node.JS 应用程序的服务器代码中,我使用 passport.js(v0.2.1,最新版本是 v0.2.2,但与 v0.2.1 - link 相比没有显着变化)进行身份验证,我也有许多路由允许用户连接他们的社交网络帐户,如 twitter 和 facebook。

由于用户已经登录,正确的passport API函数是authorize,而不是authenticate

router.get('/api/connect/facebook/callback', passport.authorize('facebook-connect', {
    successRedirect: '/profile?message_code=fb_accept',
    failureRedirect: '/profile?message_code=fb_decline',
}));

该路由在用户对 Facebook 网站授权或拒绝权限后被 Facebook 回调: - 如果用户拒绝许可,则调用失败重定向 - 如果用户授予权限,则不调用成功重定向,而是调用下一个中间件服务器

passport.js 文档没有描述如何处理成功案例。授权成功后如何重定向?

【问题讨论】:

    标签: node.js oauth passport.js


    【解决方案1】:

    总结

    成功的授权将控制权传递给下一个应该自行执行重定向的中间件。

    详情

    深入研究护照代码,在lib/authenticator.js 中,authorize 原型将assignProperty 设置为帐户:

    Authenticator.prototype.authorize = function(strategy, options, callback) {
      options = options || {};
      options.assignProperty = 'account';
      var fn = this._framework.authorize || this._framework.authenticate;
      return fn(this, strategy, options, callback);
    };
    

    由于 Passport 框架未定义 authorize,因此授权代码回退到使用 authenticate,如 lib/middleware/authenticate.js 中定义的那样。在这个方法中,成功重定向只发生在对req.logIn的回调内部,当assignProperty为真时不会调用。

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2019-04-25
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2015-02-02
      • 2020-07-18
      相关资源
      最近更新 更多