passport.js – facebook策略注销问题

我正在尝试使用此login示例设置Facebook身份validation。 示例工程,但是当我注销并尝试再次login护照自动让我在没有给我一个选项来更改Facebook用户。 任何想法如何改变这种行为?

默认情况下,如果您已经通过Facebook授权login,后续的身份validation请求将自动进行,并且不会再提示用户再次进行授权。 有三个选项可以改变这种行为:

1.将用户登出Facebook

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

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

这是你最好的select。 为此, https://graph.facebook.com/me/permissions使用有效的Facebook访问令牌对https://graph.facebook.com/me/permissions进行HTTP DELETE调用。 阅读https://developers.facebook.com/docs/reference/api/user/#permissions

3.强制用户每次login时都要重新进行身份validation

Facebook支持一个auth_type参数,它会在每次设置reauthenticate时提示用户login。 阅读https://developers.facebook.com/docs/howtos/login/client-side-re-auth/

Passport.js不支持传递这个参数,所以你可能需要做一些黑客工作来让它在你的应用程序中工作,或者向passport-facebook GitHub项目提交一个请求。

但是,您可以select提示用户每次使用特定参数进行重新validation。 工作但哈克和不推荐的方式做到这一点如下:

 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); }); } )); 

Facebook Passport支持auth_type,即使用户已经在浏览器上login,auth_type也会redirect用户重新login应用程序的OAuth令牌。 要在Facebook上启用此重新login行为,请使用以下代码

 passport.authenticate('facebook', {authType: 'reauthenticate', callbackURL:... 

您也需要从Facebook注销(或从您的设置中的列表中删除应用程序)。 否则,Facebook会记得用户(您)已经接受login到您的应用程序并返回到应用程序,而不问你任何事情。