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 以解决任何其他问题。
我正在尝试为网站 运行 关闭 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 以解决任何其他问题。