5

このログイン例を使用して Facebook 認証を設定しようとしています。例は機能しますが、ログアウトして再度ログインしようとすると、facebook ユーザーを変更するオプションが表示されずにパスポートが自動的にログインできます。この動作を変更する方法について何か考えはありますか?

4

4 に答える 4

6

デフォルトでは、Facebook でのログインをすでに承認している場合、以降の認証要求は自動的に行われ、ユーザーに再度承認を求めるプロンプトは表示されません。この動作を変更するには、次の 3 つのオプションがあります。

1. ユーザーを Facebook からログアウトする

ユーザーをアプリケーションからログアウトするだけで、Facebook を完全にログアウトする必要はないため、これは望ましくありません。

2. Facebook アプリケーションからユーザーの認証を解除する

これが最善の策です。これを行うには、有効な Facebook アクセス トークンを使用して をHTTP DELETE呼び出します。https://graph.facebook.com/me/permissions詳細については、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 プロジェクトにプル リクエストを送信する必要がある場合があります。

ただし、オプションで、特定のパラメーターを使用して毎回ユーザーに再認証を求めることができます。以下でこれを行うには、機能しますがハックで推奨されない方法:

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);
    });
  }
));
于 2013-03-08T23:44:36.113 に答える
3

Facebook Passport は auth_type をサポートしています。これにより、ユーザーがブラウザーにログインしている場合でも、アプリの OAuth トークンに再度サインインするようにユーザーをリダイレクトします。Facebook でこの再ログイン動作を有効にするには、次のコードを使用します。

passport.authenticate('facebook', {authType: 'reauthenticate', callbackURL:...
于 2013-12-15T03:49:16.270 に答える
0

Facebook からもログアウトする必要があります (または、設定のリストからアプリケーションを削除します)。そうしないと、Facebook はユーザー (あなた) がアプリへのログインを受け入れたことを記憶し、何も尋ねずにアプリケーションに戻ります。

于 2012-10-29T22:02:58.630 に答える
0

options を見ると、値は {} であり、コンストラクターのオプションとして、または認証オプションとして配置する代わりに、フィールドauth_type = "reauthenticate"を authorizationParams に追加しました (両方とも機能しませんでした)。

var fbStrategy = require('passport-facebook').Strategy;
fbStrategy.prototype.authorizationParams = function (options) {
var params = {};
params.auth_type = "reauthenticate";
// params.auth_nonce = hash.digest((new Date()).getTime());
// console.log(options,":options",params)
return params;
};
passport.use('facebook',new fbStrategy({
  clientID: process.env.clientID,
  clientSecret: process.env.clientSecret,
  callbackURL: yourcallbackURL,
   // this option to pass req
  passReqToCallback : true
},
  function (req, accessToken, refreshToken, profile, cb) {
    ......
 }));
于 2018-12-17T17:41:13.700 に答える