PassportJsとの連携の微妙さ

最近、 passporjsを使用する別のプロジェクトに取り組み 、他の開発者がインターネットで遭遇したいくつかの問題に出会いました。 しかし、私はインターネット上で答えを見つけませんでした(たぶん見栄えが悪い)。



これらの問題とその解決方法について説明します。



PassportJSとその3次元戦略のドキュメントは開始するのに十分なようですが、開発中に次のような問題がありました。

1. facebookで、たとえばメールなどの必要なフィールドが提供されませんでした

2. vkontakte、電子メールも提供しませんでしたが、Facebookとは異なる理由で



そして、最初の問題を解決します。

ドキュメントには、許可自体を実行するときにスコープをオプションに渡す必要があると記載されています。

app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login', scope: [ 'email', 'publish_actions', 'user_friends', 'user_about_me', 'user_birthday' ] }), function(req, res) { // Successful authentication, redirect home. res.redirect('/'); });
      
      







しかし、とにかくメールは返ってきませんでした。 その結果、ソースコードを差し引いて、範囲を戦略自体の設定で転送し、カンマで区切る必要があることが明らかになりました。

 passport.use(new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOOK_APP_SECRET, callbackURL: "http://localhost:3000/auth/facebook/callback", scope: 'email', enableProof: false }, function(accessToken, refreshToken, profile, done) { User.findOrCreate({ facebookId: profile.id }, function (err, user) { return done(err, user); }); } ));
      
      







実際に動作しました。



2.ただし、VKontakteは特別であり、ユーザープロファイルで電子メールを送信しないため、access_tokenが要求された直後に、 passport-vkontakteの使用に関する問題は解決されいません。 彼はソースをより深く選択し始めました。 その結果、 passport-oauth2にそのようなコードが見つかりました。

 if (arity == 5) { self._verify(accessToken, refreshToken, params, profile, verified); } else { // arity == 4 self._verify(accessToken, refreshToken, profile, verified); }
      
      





実際、これは、5つのパラメーターでコールバック検証を渡すことができ、accessTokenを受け取ったときに生のVKontakte応答がparamsに含まれることを示唆しています。

 passport.use(new VKontakteStrategy({ clientID: VKONTAKTE_APP_ID, // VK.com docs call it 'API ID' clientSecret: VKONTAKTE_APP_SECRET, callbackURL: "http://localhost:3000/auth/vkontakte/callback" }, function(accessToken, refreshToken, params, profile, done) { //params.email -   ! } ));
      
      







今のところすべてです。



All Articles