我正在尝试Sails.js
使用 Google OAuth2.0 策略在应用程序中实现 passport.js 身份验证。我考虑过使用sails-generate-auth
,sails-auth
但它们不再受支持。我也考虑过Waterlock
,但它只适用于本地、Twitter 和 Facebook 策略。
当用户按下“使用 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);
},
其他信息: Passport 在以下位置初始化config/policies.js
:
'*': [
passport.initialize(),
passport.session(),
],
我的问题:我得到错误的可能原因是什么?