什么是在我的帆.js护照.js实现的InternalOAuthError的原因
What is the cause of the InternalOAuthError in my sails.js passport.js implementation?
我试图在Sails.js
应用程序中实现passport.js身份验证,使用Google OAuth2.0策略。我考虑过使用sails-generate-auth
和sails-auth
,但它们不再受支持。我也考虑过Waterlock
,但它只适用于本地,Twitter和Facebook策略。
当用户按下"login with google+"按钮时,下面的google()
函数被调用。预期的行为是,用户然后被重定向到一个Google页面,在那里他们被提示进行身份验证。实际上,以下错误记录在标记的行上。此时user对象是未定义的。
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
中,并在点击"login with 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 is initialized in config/policies.js
:
'*': [
passport.initialize(),
passport.session(),
],
我的问题:我得到的错误可能的原因是什么?
我在使用Express、passport和passport-google-oath时遇到了同样的问题。我通过切换到passport-google-oauth20解决了这个问题。
我不能100%确定这是否是原因,但谷歌似乎已经放弃了OAuth支持相当长一段时间了。
重要:OAuth 1.0已于2012年4月20日正式弃用,不再支持。我们建议您尽快迁移到OAuth 2.0。
你必须将你的策略更改为:
var GoogleStrategy = require('passport-google-oauth20').Strategy;
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);
});
}
));
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Selectize.js:如何对整数值的选项进行排序
- 通过js在新选项卡中有条件地打开url