node.js谷歌认证回调错误

node.js Googe Authentication callback error

我正在尝试为网站 运行 关闭 node.js、passport.js、express & mongodb 设置 Googe 身份验证,主要基于 this example.我已设法使本地身份验证正常工作,但在尝试使 Google 身份验证正常工作时,我在尝试初始化服务器时遇到 TypeError: OAuth2Strategy requires a verify callback 错误。

Google 的身份验证策略保存在 /config/passport.js 中,如下所示:

var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy();
var User = require('../models/user');
var configAuth = require('./auth');

module.exports = function(passport) {
    // serialize the user session
    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

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

// =================GOOGLE=======================

    var strategyOptions = {
        clientID        : configAuth.googleAuth.clientID,
        clientSecret    : configAuth.googleAuth.clientSecret,
        callbackURL     : configAuth.googleAuth.callbackURL,

    };
    var verifyCallback = function(token, 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 = token;
                    newUser.google.name = profile.displayName;
                    newUser.google.email = profile.emails[0].value;

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

    };

    passport.use(new GoogleStrategy(strategyOptions, verifyCallback));

};    

我的 app.js 看起来如下(调用 passport.js 加粗):

// set up ================================================================
var express = require('express');
var app = express()
var path = require('path');
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');

var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

var configDB = require('./config/database.js');

// config ================================================================

mongoose.connect(configDB.url);

require('./config/passport')(passport);

//set up express application
app.use(morgan('dev'));
app.use(cookieParser());
app.use(bodyParser());

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(session({ secret: 'what a long string' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(express.static(path.join(__dirname, 'public')));

// routes ================================================================

require('./routes/index.js')(app, passport);

// launch ================================================================

//app.listen(port);
module.exports = app;

我不知道这里出了什么问题,因为据我所知,passport.use() 函数中提供了 verifyCallback。我花了最后一天时间在 Whosebug 上四处搜索和搜索,但还没有找到有效的修复方法。

如果这是一个非常明显的错误,我深表歉意,我对整个节点生态系统和一般网页设计都是新手。如果有帮助,很乐意提供更多信息。

你已经做到了 well.The 问题是获取 google 策略。

更改此行

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

给下面提到的那个

var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
  • 您可以查看工作示例 here 以解决任何其他问题。

供参考:https://github.com/Khushbu-2112/OAuth-google-example