2016-07-27 96 views
2

我想通过谷歌认证通行证谷歌认证用户,但它一直发送InternalOAuthError:未能获取请求令牌InternalOAuthError:无法在nodejs中获取请求令牌通行证

错误观点

InternalOAuthError: Failed to obtain request token at Strategy.OAuthStrategy._createOAuthError (/Users/menaka/WebstormProjects/cardCreaterServer/node_modules/passport-oauth1/lib/strategy.js:396:17) at /Users/menaka/WebstormProjects/cardCreaterServer/node_modules/passport-oauth1/lib/strategy.js:244:41 at /Users/menaka/WebstormProjects/cardCreaterServer/node_modules/oauth/lib/oauth.js:543:17 at passBackControl (/Users/menaka/WebstormProjects/cardCreaterServer/node_modules/oauth/lib/oauth.js:397:13) at IncomingMessage. (/Users/menaka/WebstormProjects/cardCreaterServer/node_modules/oauth/lib/oauth.js:409:9) at emitNone (events.js:72:20) at IncomingMessage.emit (events.js:166:7) at endReadableNT (_stream_readable.js:921:12)
at nextTickCallbackWith2Args (node.js:442:9) at process._tickCallback (node.js:356:17)

我已经启用谷歌+ API谷歌的API Manager里面platform.and这里是我的 授权的JavaScript源

http://localhost:3000

经过授权重定向URI

http://localhost:3000/auth/google/callback

在身旁我routes.js文件

var User = require('./models/user'); 
module.exports = function(app, passport){ 
    app.get('/', function(req, res){ 
     res.render('index.ejs'); 
    }); 

    app.get('/login', function(req, res){ 
     res.render('login.ejs', { message: req.flash('loginMessage') }); 
    }); 
    app.post('/login', passport.authenticate('local-login', { 
     successRedirect: '/profile', 
     failureRedirect: '/login', 
     failureFlash: true 
    })); 

    app.get('/signup', function(req, res){ 
     res.render('signup.ejs', { message: req.flash('signupMessage') }); 
    }); 


    app.post('/signup', passport.authenticate('local-signup', { 
     successRedirect: '/', 
     failureRedirect: '/signup', 
     failureFlash: true 
    })); 

    app.get('/profile', isLoggedIn, function(req, res){ 
     res.render('profile.ejs', { user: req.user }); 
    }); 

    app.get('/auth/google', passport.authenticate('google', {scope: ['profile','email']})); 

    app.get('/auth/google/callback', 
     passport.authenticate('google', { successRedirect: '/profile', 
      failureRedirect: '/' })); 


    app.get('/logout', function(req, res){ 
     req.logout(); 
     res.redirect('/'); 
    }) 
}; 

function isLoggedIn(req, res, next) { 
    if(req.isAuthenticated()){ 
     return next(); 
    } 

    res.redirect('/login'); 
} 

我passport.js内

var LocalStrategy = require('passport-local').Strategy; 

var GoogleStrategy = require('passport-google-oauth').OAuthStrategy; 

var User   = require('../app/models/user'); 

var configAuth=require('./auth'); 

module.exports = function(passport) { 


    passport.serializeUser(function(user, done){ 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done){ 
     User.findById(id, function(err, user){ 
      done(err, user); 
     }); 
    }); 


    passport.use('local-signup', new LocalStrategy({ 
      usernameField: 'email', 
      passwordField: 'password', 
      passReqToCallback: true 
     }, 
     function(req, email, password, done){ 
      process.nextTick(function(){ 
       User.findOne({'local.username': email}, function(err, user){ 
        if(err) 
         return done(err); 
        if(user){ 
         return done(null, false, req.flash('signupMessage', 'That email already taken')); 
        } else { 
         var newUser = new User(); 
         newUser.local.username = email; 
         newUser.local.password = newUser.generateHash(password); 

         newUser.save(function(err){ 
          if(err) 
           throw err; 
          return done(null, newUser); 
         }) 
        } 
       }) 

      }); 
     })); 

    passport.use('local-login', new LocalStrategy({ 
      usernameField: 'email', 
      passwordField: 'password', 
      passReqToCallback: true 
     }, 
     function(req, email, password, done){ 
      process.nextTick(function(){ 
       User.findOne({ 'local.username': email}, function(err, user){ 
        if(err) 
         return done(err); 
        if(!user) 
         return done(null, false, req.flash('loginMessage', 'No User found')); 
        if(!user.validPassword(password)){ 
         return done(null, false, req.flash('loginMessage', 'invalid password')); 
        } 
        return done(null, user); 

       }); 
      }); 
     } 
    )); 

    passport.use(new GoogleStrategy({ 
      consumerKey: configAuth.GoogleAuth.clientID, 
      consumerSecret: configAuth.GoogleAuth.clientSecret, 
      callbackURL: configAuth.GoogleAuth.callbackURL 
     }, 
     function(accessToken, refreshToken, profile, done) { 
      process.nextTick(function(){ 
       User.findOne({'google.id':profile.id},function(err,user){ 
        if(err){ 
         return done(err); 
        } 
        if(user){ 
         return done(null,user); 
        }else{ 
         var newUser=new User(); 
         newUser.google.id=profile.id; 
         newUser.google.token=accessToken; 
         newUser.google.name=profile.displayName; 
         newUser.google.email=profile.emails[0].value; 

         newUser.save(function(err){ 
          if(err){ 
           throw err; 
          } 
          return done(null,newUser); 
         }) 
        } 
       }); 
      }); 
     } 
    )); 




}; 

的callbackURL是

http://localhost:3000/auth/google/callback

我有什么,为了做到解决这个问题?

回答

0

尝试转到/node_modules/passport-oauth1/lib/strategy.js:396:17)console.log的错误消息,并查看输出。

+0

如果您能提供downvote的原因,那将是很好的! –

-1

在这一段时间里让我感到头疼 - 好像在基本策略中有一个旧的链接参考。建议您尝试

https://github.com/jaredhanson/passport-google-oauth2

代替。它是最新的,并立即为我工作!

*调试解决方案让我这个解决方案,顺便说一句。

+0

这明显工作 - 为什么downvote? –