1

Google OAuth2.0戦略を使用してSails.jsアプリでpassport.js認証を実装しようとしています。私はsails-generate-authsails-authを使用すると考えましたが、サポートされなくなりました。私はWaterlockも考慮しましたが、ローカル、Twitter、Facebook戦略でのみ動作します。sails.jsのpassport.js実装でInternalOAuthErrorの原因は何ですか?

下記のgoogle()機能は、ユーザーが「google +でログイン」ボタンを押したときに呼び出されます。予想される動作は、ユーザーがGoogleページにリダイレクトされ、そこで自分自身を認証するよう促されることです。実際には、次のエラーがマークされた行に記録されます。その時点でユーザーオブジェクトは定義されていません。

InternalOAuthError: Failed to obtain request token (status: 307 data: <HTML> 
<HEAD> 
<TITLE>Temporary Redirect</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Temporary Redirect</H1> 
The document has moved <A HREF="https://accounts.google.com/OAuthGetRequestToken">here</A>. 
</BODY> 
</HTML> 
) 

以下の機能はAuthControllerにあり、[Google+でログイン]ボタンをクリックすると呼び出されます。

google(request, response) { 
    const google = sails.config.oauth.google; 
    passport.use(new GoogleStrategy({ 
      consumerKey: MY_KEY, 
      consumerSecret: MY_SECRET, 
      callbackURL: 'http://localhost:1337/auth/callback/google', 
     }, (token, tokenSecret, profile, done) => { 
      //Verify callback: Never appears to get called. 
      User.findOrCreate({ providerId: profile.id, provider: 'Google' }).then((user) => { 
       request.session.me = user; 
       return done(user); 
      }).catch(error => { 
       sails.log('Failed to log in using Google: ' + error); 
      }); 
     } 
    )); 

    passport.authenticate('google', { 
     failureRedirect: '/login', 
     scope: [ 
      'profile', 
     ], 
    }, function(error, user) { 
     //Gets called, but user is undefined. 
     if (error) { 
      sails.log('Err: ' + error); //<== Error gets logged here. 
     } 
     request.logIn(user, function(error) { 
      if (error) { 
       sails.log('err: ' + error); 
       response.view('500'); 
       return; 
      } 
      res.redirect('/'); 
     }); 
    })(request, response); 
}, 

その他情報:パスポートはconfig/policies.jsに初期化されます:

'*': [ 
    passport.initialize(), 
    passport.session(), 
], 

は私の質問:私は取得しています、エラーの可能性の高い原因は何ですか?

答えて

0

Express、パスポート、パスポート - google-oathを使用して同じ問題が発生しました。 passport-google-oauth20に切り替えることでこれを解決しました。

これが理由であれば100%は確信していませんが、GoogleがOAuthサポートをかなり後にしてしまったようです。

重要:OAuth 1.0は2012年4月20日に正式に廃止され、サポートされなくなりました。できるだけ早くOAuth 2.0に移行することをおすすめします。

あなたはあなたに戦略を変更する必要があります:。

するvar GoogleStrategy =必要( 'パスポート-グーグル-oauth20')戦略。

passport.use(new GoogleStrategy({ 
    clientID: GOOGLE_CLIENT_ID, 
    clientSecret: GOOGLE_CLIENT_SECRET, 
    callbackURL: "http://www.example.com/auth/google/callback" 
    }, 
    function(accessToken, refreshToken, profile, cb) { 
    User.findOrCreate({ googleId: profile.id }, function (err, user) { 
     return cb(err, user); 
    }); 
    } 
)); 
関連する問題