ale*_*cor 19 node.js express google-oauth2
同时开发的最后一个例子node.js中的入门书(一express.js使用谷歌OpenID身份验证策略的应用),更换后passport-google包(其中有过时的2015年4月20日)与passport-google-oauth2包(由谷歌OAuth认证策略2.0)并按照其文档页面上的说明和示例进行了说明 ; 选择我的Google+帐户后,我收到了以下错误,该帐户由oath2.js模块引发,具体this._oauth2.get("https://www.googleapis.com/plus/v1/people/me",...)在userProfile(accessToken, done)方法内调用.相关的源代码和模块依赖关系如下.
什么可能是问题的根源?
具体错误是:
InternalOAuthError: failed to fetch user profile
at <...>\web-app\b4\node_modules\passport-google-oauth2\lib\oauth2.js:92:28
at passBackControl (<...>\web-app\b4\node_modules\passport-google-oauth2\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:124:9)
at IncomingMessage.<anonymous> (<...>\web-app\b4\node_modules\passport-google-oauth2\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7)
at IncomingMessage.emit (events.js:129:20)
at _stream_readable.js:908:16
at process._tickCallback (node.js:355:11)
Run Code Online (Sandbox Code Playgroud)
相关应用程序的代码是:
passport = require('passport'),
//...
GoogleStrategy = require('passport-google-oauth2').Strategy; // #passport-google-oauth2
//...
/***** #passport-google-oauth2 vv *****/
passport.use(new GoogleStrategy({
clientID: "a_specific_value",
clientSecret: "another_specific_value",
callbackURL: "http://127.0.0.1:3000/auth/google/callback",
passReqToCallback:true
},
function(request, accessToken, refreshToken, profile, done) {
profile.identifier=profile.id;
return done(null, profile);
}
));
/***** #passport-google-oauth2 ^^ *****/
//...
/***** #passport-google-oauth2 vv *****/
app.get('/auth/google',
passport.authenticate('google', { successRedirect: '/',scope:
[ 'https://www.googleapis.com/auth/userinfo.email']})
);
app.get( '/auth/google/callback',
passport.authenticate( 'google', {
successRedirect: '/',
failureRedirect: '/'
}));
/***** #passport-google-oauth2 ^^ *****/
Run Code Online (Sandbox Code Playgroud)
该应用程序具有以下依赖项:
b4@0.0.1 ??? connect-redis@1.4.7 ? ??? debug@2.1.3 ? ? ??? ms@0.7.0 ? ??? redis@0.10.3 ??? cookie-parser@1.3.4 ? ??? cookie@0.1.2 ? ??? cookie-signature@1.0.6 ??? express@3.3.8 ? ??? buffer-crc32@0.2.1 ? ??? commander@1.2.0 ? ? ??? keypress@0.1.0 ? ??? connect@2.8.8 ? ? ??? bytes@0.2.0 ? ? ??? formidable@1.0.14 ? ? ??? pause@0.0.1 ? ? ??? qs@0.6.5 ? ? ??? uid2@0.0.2 ? ??? cookie@0.1.0 ? ??? cookie-signature@1.0.1 ? ??? debug@2.1.3 ? ? ??? ms@0.7.0 ? ??? fresh@0.2.0 ? ??? methods@0.0.1 ? ??? mkdirp@0.3.5 ? ??? range-parser@0.0.4 ? ??? send@0.1.4 ? ??? mime@1.2.11 ??? express-session@1.11.1 ? ??? cookie@0.1.2 ? ??? cookie-signature@1.0.6 ? ??? crc@3.2.1 ? ??? debug@2.1.3 ? ? ??? ms@0.7.0 ? ??? depd@1.0.1 ? ??? on-headers@1.0.0 ? ??? parseurl@1.3.0 ? ??? uid-safe@1.1.0 ? ? ??? base64-url@1.2.1 ? ? ??? native-or-bluebird@1.1.2 ? ??? utils-merge@1.0.0 ??? morgan@1.5.2 ? ??? basic-auth@1.0.0 ? ??? debug@2.1.3 ? ? ??? ms@0.7.0 ? ??? depd@1.0.1 ? ??? on-finished@2.2.0 ? ??? ee-first@1.1.0 ??? npmlog@0.0.4 ? ??? ansi@0.1.2 ??? passport@0.2.1 ? ??? passport-strategy@1.0.0 ? ??? pause@0.0.1 ??? passport-google-oauth2@0.1.6 ? ??? passport-oauth2@1.1.2 ? ??? oauth@0.9.12 ? ??? passport-strategy@1.0.0 ? ??? uid2@0.0.3 ??? q@0.9.7 ??? redis@0.8.6 ??? request@2.27.0 ??? aws-sign@0.3.0 ??? cookie-jar@0.3.0 ??? forever-agent@0.5.2 ??? form-data@0.1.4 ? ??? async@0.9.0 ? ??? combined-stream@0.0.7 ? ??? delayed-stream@0.0.5 ??? hawk@1.0.0 ? ??? boom@0.4.2 ? ??? cryptiles@0.2.2 ? ??? hoek@0.9.1 ? ??? sntp@0.2.4 ??? http-signature@0.10.1 ? ??? asn1@0.1.11 ? ??? assert-plus@0.1.5 ? ??? ctype@0.5.3 ??? json-stringify-safe@5.0.0 ??? mime@1.2.11 ??? node-uuid@1.4.3 ??? oauth-sign@0.3.0 ??? qs@0.6.6 ??? tunnel-agent@0.3.0
ale*_*cor 56
我很幸运在jaredhanson/passport-google-oauth找到了一个类似的问题
,这让我想到了Google的项目控制台,只是启用了Google+ API "关闭"(哦,我!),他的第一个天真的开发者基于Google+的申请).这是问题的根源.我再次尝试并oauth2开始正确接收配置文件.
在scope您使用现已弃用:
passport.authenticate('google', { successRedirect: '/',scope:
[ 'https://www.googleapis.com/auth/userinfo.email']})
);
Run Code Online (Sandbox Code Playgroud)
相反,我们必须使用这个:
passport.authenticate('google', { successRedirect: '/',scope:
['email']
}));
Run Code Online (Sandbox Code Playgroud)
你也可以得到profile scope:
passport.authenticate('google', { successRedirect: '/',scope:
[ 'email', 'profile' ]
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9999 次 |
| 最近记录: |