node.js - passport.js - facebook 策略注销问题

标签 node.js express passport.js

我正在尝试使用此 login example 设置 facebook 身份验证.示例有效,但是当我注销并尝试再次登录时, Passport 会自动让我进入,而不会给我更改 facebook 用户的选项。关于如何改变这种行为的任何想法?

最佳答案

默认情况下,如果您已经授权使用 Facebook 登录,则后续的身份验证请求将是自动的,不会提示用户再次授权。可以通过三个选项更改此行为:

1。将用户从 Facebook 注销

这是不可取的,因为您只想让用户退出您的应用程序,而不是完全退出 Facebook。

2。从您的 Facebook 应用程序中取消对用户的授权

这是您最好的选择。为此,请使用有效的 Facebook 访问 token 对 https://graph.facebook.com/me/permissions 进行 HTTP DELETE 调用。在 https://developers.facebook.com/docs/reference/api/user/#permissions 阅读更多内容.

3。每次登录时强制用户重新验证

Facebook 支持auth_type 参数,设置为reauthenticate 时会提示用户每次登录。在 https://developers.facebook.com/docs/howtos/login/client-side-re-auth/ 阅读更多内容.

Passport.js 不支持开箱即用地传递此参数,因此您可能需要进行一些修改才能使其在您的应用程序中正常工作,或者向 passport-facebook GitHub 项目提交拉取请求。

但是,您可以选择提示用户每次使用特定参数重新进行身份验证。工作但 hacky 和不推荐的方式如下:

FacebookStrategy.prototype.authorizationParams = function (options) {
  var params = {},
      display = options.display,
      auth_type = options.auth_type;
  if (display) params['display'] = display;
  if (auth_type) params['auth_type'] = auth_type;
  return params;
};
passport.use(new FacebookStrategy({
    clientID: FACEBOOK_APP_ID,
    clientSecret: FACEBOOK_APP_SECRET,
    callbackURL: "http://localhost:3000/auth/facebook/callback",
    auth_type: "reauthenticate"
  },
  function(accessToken, refreshToken, profile, done) {
    process.nextTick(function () {
      return done(null, profile);
    });
  }
));

关于node.js - passport.js - facebook 策略注销问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873960/

相关文章:

javascript - 使用 Mongoose 查询仅获取子文档

node.js - Postman 可以工作,但 Fetch 不能。我究竟做错了什么?

node.js - 引用错误: t is not defined

Node.js Express + Passport + Cookie session n > 1 个服务器

javascript - Express + Passport - req.session.passport 在后续请求中未定义

node.js - 为什么我应该使用 Restify?

javascript - Firebase函数: Node. js:迭代存储在firebase文档字段中的映射

node.js - 如何保护 Node 应用程序源代码?

javascript - 如何从 Passport.js 更改本地策略身份验证的用户对象?

javascript - 如何使用 webpack 服务器端处理静态 Assets ?