代码之家  ›  专栏  ›  技术社区  ›  Konrad

strategy.oauth2strategy.parseErrorResponse-nodejs passport google oauth2.0出错

  •  2
  • Konrad  · 技术社区  · 6 年前

    我正在尝试使用passport和google passport-google-oauth20在node.js中嵌入google身份验证。问题是,当Google回调路径打开时,我得到:

    Error
    at Strategy.OAuth2Strategy.parseErrorResponse (E:\Programowanie\NodeJS\Hydronide\node_modules\passport-oauth2\lib\strategy.js:329:12)
    at Strategy.OAuth2Strategy._createOAuthError (E:\Programowanie\NodeJS\Hydronide\node_modules\passport-oauth2\lib\strategy.js:376:16)
    at E:\Programowanie\NodeJS\Hydronide\node_modules\passport-oauth2\lib\strategy.js:166:45
    at E:\Programowanie\NodeJS\Hydronide\node_modules\oauth\lib\oauth2.js:191:18
    at passBackControl (E:\Programowanie\NodeJS\Hydronide\node_modules\oauth\lib\oauth2.js:132:9)
    at IncomingMessage.<anonymous> (E:\Programowanie\NodeJS\Hydronide\node_modules\oauth\lib\oauth2.js:157:7)
    at emitNone (events.js:110:20)
    at IncomingMessage.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1059:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    

    我(或多或少)跟着 this tutorial . 这是我的代码: 路由(从'/auth'开始)

    'use strict'
    
    const passport = require('passport')
    const router = require('express').Router()
    
    router.get(
      '/google',
      (req, res, next) => {
        if (req.query.return) {
          req.session.oauth2return = req.query.return
        }
        next()
      },
      passport.authenticate('google', { scope: ['email', 'profile'] })
    )
    
    router.get(
      '/google/callback',
      passport.authenticate('google'),
      (req, res) => {
        const redirect = req.session.oauth2return || '/';
        delete req.session.oauth2return;
        res.redirect(redirect);
      }
    );
    
    module.exports = router
    

    有一个Passport配置:

    'use strict'
    const passport = require('passport')
    const keys = require('./keys')
    const GoogleStrategy = require('passport-google-oauth20').Strategy
    const userController = require('../controllers/user-controller')
    
    const passportConfig = {
      clientID: keys.google.clientId,
      clientSecret: keys.google.clientSecret,
      callbackURL: 'auth/google/callback',
      accessType: 'offline'
    }
    
    passport.use(new GoogleStrategy(passportConfig,
      (accessToken, refreshToken, profile, done) => {
      console.log(accessToken, refreshToken, profile, done)
      userController.getUserByExternalId('google', profile.id)
      .then(user => {
        if (!user) {
          userController.createUser(profile, 'google')
          .then(user => {
            return done(null, user)
          })
          .catch(err => {
            return done(err)
          })
        }
        return done(null, user)
      })
      .catch(err => {
        return done(err)
      })
    }))
    
    passport.serializeUser((user, cb) => {
      cb(null, user)
    })
    passport.deserializeUser((obj, cb) => {
      cb(null, obj)
    })
    

    如您所见,我在新的GoogleStegy第二个参数函数中添加了console.log,但它从不触发。

    //编辑 我注意到不是分配 require('passport-google-oauth20').Strategy 我用过 require('passport-google-oauth20') . 但是修复它不会改变任何东西,仍然是同样的错误。 我能补充一个问题的是,在我的主要失败中,我打电话给

    // sets passport config
    require('./config/jwt-auth')
    require('./config/google-auth')
    
    // initialize passport
    app.use(passport.initialize())
    

    所以我不认为里面有什么问题。

    2 回复  |  直到 5 年前
        1
  •  1
  •   stephen gatana    5 年前

    localhost:3000

    passport.use(new googleStrategy({
        clientID:keys.clientID,
        clientSecret:keys.clientSecret,
        callbackURL:'auth/google/callback'
    },(accessToken,refreshToken, profile,done)=>{
        console.log(accessToken);
        console.log(refreshToken);
        console.log(profile);
    }
    ));
    
    app.get('/auth',passport.authenticate('google',{
    
        scope:['profile','email']
    }));
    app.get('/auth/google/callback', 
      passport.authenticate('google'));
    

    passport.use(new googleStrategy({
        clientID:keys.clientID,
        clientSecret:keys.clientSecret,
        callbackURL:'http://localhost:3000/auth/google/callback'
    },(accessToken,refreshToken, profile,done)=>{
        console.log(accessToken);
        console.log(refreshToken);
        console.log(profile);
    }
    ));
    
    app.get('/auth',passport.authenticate('google',{
        scope:['profile','email']
    }));
    
    app.get('/auth/google/callback', 
      passport.authenticate('google'));
    
        2
  •  2
  •   eduPeeth    6 年前

    E:\Programowanie\NodeJS\Hydronide\node_modules\passport-oauth2\lib\strategy.js
    E:\Programowanie\NodeJS\Hydronide\node_modules\oauth\lib\oauth2.js