node.js Googe身份验证回调错误

问题描述 投票:2回答:1

[我正在尝试将Googe身份验证设置为一个主要基于this example来运行node.js,passport.js,express和mongodb的网站。我设法使本地身份验证正常工作,但是当尝试使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看起来如下(加粗了password.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;

我无法分辨出这里出了什么问题,因为据我所知,password.use()函数中提供了verifyCallback。我花了最后一天在谷歌上搜索并搜索StackOverflow,但还没有找到可行的修复程序。

抱歉,如果这确实是一个明显的错误,那么我通常是整个节点生态系统和Web设计的新手。如果有帮助,很乐意提供更多信息。

javascript node.js express passport.js google-authentication
1个回答
1
投票

您做得很好。问题在于获取Google策略。

更改此行

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

至下面提到的一个

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

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

© www.soinside.com 2019 - 2024. All rights reserved.