2015-05-09 33 views
16

bir 'ın tanıtım book (Google OpenID tarafından uygulamasını kullanarak kimlik doğrulama stratejisi) son örneği geliştirirken, sonra (20 Nisan 2015 tarihinde yürürlüğe giren) (passport-google-oauth2) paketiyle (Google OAuth 2.0 tarafından kimlik doğrulama stratejisi) ve its documentation's page ve example here numaralarındaki endikasyonları takip eden passport-google paketinin değiştirilmesi; modülü tarafından atılan Google+ hesabımı seçtikten sonra aşağıdaki hata oluştu: somut olarak this._oauth2.get("https://www.googleapis.com/plus/v1/people/me",...), userProfile(accessToken, done) yöntemiyle. İlgili kaynak kodu ve modül bağımlılıkları aşağıdadır.node.js "pasaport-google-OAuth2" teslim Ekspres uygulamasında hata "kullanıcı profili alınamadı"

Problemin kökü ne olabilir?

beton hatadır:

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) 

ilgili uygulamanın kod şudur:

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 ^^ *****/  

uygulama aşağıdaki bağımlılıklar vardır:

 
[email protected] 
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ └─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├── [email protected] 
├── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    ├─┬ [email protected] 
    │ ├── [email protected] 
    │ └─┬ [email protected] 
    │ └── [email protected] 
    ├─┬ [email protected] 
    │ ├── [email protected] 
    │ ├── [email protected] 
    │ ├── [email protected] 
    │ └── [email protected] 
    ├─┬ [email protected] 
    │ ├── [email protected] 
    │ ├── [email protected] 
    │ └── [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    └── [email protected] 

cevap

49

Sadece neyse bir buldukde benzer bir sorun Google's project console'a gitmek için fikrini bana verenjaredhanson/passport-google-oauth ve sadece “kapalı” olan Google+ API'u etkinleştirin (ah, ben Google + 'ya dayalı ilk uygulamasının saf geliştiricisi). Problemin kökü buydu. Tekrar denedim ve oauth2 profilleri doğru şekilde almaya başladı.

+1

:

passport.authenticate('google', { successRedirect: '/',scope: ['email'] })); 

Ayrıca profile scope alabilirsiniz: Yerine

passport.authenticate('google', { successRedirect: '/',scope: [ 'https://www.googleapis.com/auth/userinfo.email']}) ); 

, biz bu bir kullanmalıdır benim için de ne oldu, teşekkürler! – Nocturno

+1

Ayrıca, https: // www.googleapis.com/auth/userinfo.profile' ve https: // www.googleapis.com/auth/userinfo.email '' profili 've 'e-posta olarak değiştirilen kullanım biçimlerini de kullandım. sırasıyla. – Samin

+0

wow, bu konuda çok zaman geçirdi. Gerçekten bir çeşit hata vermeliler! Benim için geri arama –

4

scope artık uygun bulunmamaktadır kullanıyor: tam olarak

passport.authenticate('google', { successRedirect: '/',scope: 
    [ 'email', 'profile' ] 
})); 
+0

Github oauth ile aynı sorunu yaşıyorum. Neyin eksik olduğu hakkında bir fikrin var mı? – Sandeep