gpt4 book ai didi

javascript - Node 无法调用未定义的方法 'serializeUser'

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:28 24 4
gpt4 key购买 nike

我正在使用 Passport 与 Google 创建身份验证系统。我正在关注 this 教程。但是,在我的 Passport.js 文件中,我不断收到此错误:

D:\Programming\weebly-site\config\passport.js:11
passport.serializeUser(function(user, done){
^
TypeError: Cannot call method 'serializeUser' of undefined
at module.exports (D:\Programming\weebly-site\config\passport.js:11:11)
at Object.<anonymous> (D:\Programming\weebly-site\routes\admin.js:9:46)
at Object.<anonymous> (D:\Programming\weebly-site\routes\admin.js:39:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (D:\Programming\weebly-site\app.js:18:19)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (D:\Programming\weebly-site\bin\www:3:11)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3

这是我的 Passport.js 文件:

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

var User = require('../models/users.js');

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


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(new GoogleStrategy({
clientID : configAuth.googleAuth.clientID,
clientSecret : configAuth.googleAuth.clientSecret,
callbackURL : configAuth.googleAuth.callbackURL,
},
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);
});
}
});
});
}));
};

App.js 文件:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var coffeeScript = require('coffee-script');
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var session = require('express-session');

var configDB = require('./config/database.js');
mongoose.connect(configDB.url);
require('./config/passport.js')(passport);

var routes = require('./routes/index');
var adminRoutes = require('./routes/admin')
var users = require('./routes/users');

var app = express();


app.use('/', routes);
app.use('/admin',adminRoutes);
app.use('/users', users);

....
app.use(session({secret: 'lotsofwords', saveUninitialized: true, resave: true}));
app.use(passport.initialize());
app.use(passport.session());
....

module.exports = app;

Admin.js

// Generated by CoffeeScript 1.8.0
(function() {
var express, isLoggedIn, pasport, passport, router;

express = require('express');

passport = require('passport');

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

router = express.Router();

isLoggedIn = function(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/admin");
};

router.get('/', function(req, res) {
return res.render('admin/admin_index.jade');
});

router.get('/editor', function(req, res) {
return res.render('admin/admin_editor.jade');
});

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

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

module.exports = router;

}).call(this);

我不知道如何解决这个问题 - 我在 SO 和 google 上进行了搜索,但没有结果。任何帮助将不胜感激,谢谢!

最佳答案

您正在查找错误的文件。错误位于 D:\Programming\weebly-site\routes\admin.js:9:46 中。您正在调用 config/passport.js 导出函数,而不传入 Passport 模块。

关于javascript - Node 无法调用未定义的方法 'serializeUser',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26491240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com