1

Google OAuth2.0 전략을 사용하여 Sails.js 앱에서 passport.js 인증을 구현하려고합니다. sails-generate-authsails-auth을 사용했지만 더 이상 지원되지 않습니다. 나는 또한 Waterlock을 고려했지만 로컬, 트위터 및 페이 스북 전략에서만 작동합니다.내 sails.js passport.js 구현에서 InternalOAuthError의 원인은 무엇입니까?

아래의 기능은 사용자가 '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, passport 및 passport-google-oath를 사용하여 동일한 문제가 발생했습니다. 나는 passport-google-oauth20로 전환하여 이것을 해결했다.

Google이 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); 
    }); 
    } 
)); 
관련 문제