passport.js - facebook策略注销问题

adr*_*ian 5 node.js express passport.js

我正在尝试使用此登录示例设置facebook身份验证.示例有效,但当我退出并尝试再次登录时,护照会自动让我进入,而不会给我一个更改Facebook用户的选项.有关如何改变这种行为的任何想法?

Rob*_*rco 6

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

1.将用户退出Facebook

这是不可取的,因为您只想将用户从应用程序中注销而不是完全从Facebook注销.

2.从Facebook应用程序中取消授权用户

这是你最好的选择.为此,HTTP DELETEhttps://graph.facebook.com/me/permissions使用有效的Facebook访问令牌进行呼叫.有关详细信息,访问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);
    });
  }
));
Run Code Online (Sandbox Code Playgroud)