最近、
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) {
しかし、とにかくメールは返ってきませんでした。 その結果、ソースコードを差し引いて、範囲を戦略自体の設定で転送し、カンマで区切る必要があることが明らかになりました。
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 {
実際、これは、5つのパラメーターでコールバック検証を渡すことができ、accessTokenを受け取ったときに生のVKontakte応答がparamsに含まれることを示唆しています。
passport.use(new VKontakteStrategy({ clientID: VKONTAKTE_APP_ID,
今のところすべてです。