Node.js“passport-google-oauth2”在Express应用程序中传递“未能获取用户configuration文件”错误
在开发node.js入门书 (一个使用Google OpenIDauthentication策略的express.js应用程序)的最后一个例子时,在将passport-google
包(在2015年4月20日过期)replace为passport-google-oauth2
软件包(Google OAuth 2.0authentication策略),并遵循其文档页面上的说明和示例 。 select了oath2.js
模块抛出的Google+帐号后,我得到了以下错误,具体调用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)
相关应用程序的代码是:
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 ^^ *****/
该应用程序具有以下依赖项:
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.3.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
幸运的是,在jaredhanson / passport-google-oauth上发现了一个类似的问题,这让我想到了Google的项目控制台 ,只是启用了被closures的Google+ API
(哦,我是天真的开发者他的第一个基于Google+的应用程序)。 这是问题的根源。 我再次尝试, oauth2
开始正确接收configuration文件。
您正在使用的scope
现在已被弃用:
passport.authenticate('google', { successRedirect: '/',scope: [ 'https://www.googleapis.com/auth/userinfo.email']}) );
相反,我们必须使用这个:
passport.authenticate('google', { successRedirect: '/',scope: ['email'] }));
您还可以获取profile scope
:
passport.authenticate('google', { successRedirect: '/',scope: [ 'email', 'profile' ] }));