我正在尝试使用此 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/