gpt4 book ai didi

node.js - 错误 : passport. 初始化()中间件未使用 |在数据库中创建用户但出现此错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:14 26 4
gpt4 key购买 nike

我正在尝试让用户注册我的应用程序,当我这样做时,它会在控制台中显示错误 错误:passport.initialize() middleware not in use 但我确实有 Passport 已初始化。但它确实在数据库中正确创建了用户。看来最初的 Passport 设置是错误的。

我已经包含了我认为应用程序的重要部分来解释正在发生的事情。我在堆栈跟踪指向的行添加了注释。

App.js

app.use(session({
secret: config.sessionSecret,
// create new redis store.
store: new RedisStore({ host: 'localhost', port: 6379, client: client, auto_reconnect: true}),
saveUninitialized: false,
resave: false,
cookie: {
maxAge: 60 * 1000 * 60 * 24 * 30 // 30 days
},
}));

// PASSPORT CONFIGURATION
require('./controllers/passport')(passport);
app.use(passport.initialize());
app.use(passport.session());

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

controllers/passport.js

passport.use('signup', new LocalStrategy({
usernameField: 'email',
passReqToCallback : true
},
function(req, email, password, done) {
User.findOne({ email: req.body.email }, function(err, existingUser) {
if(err){
console.log(err);
}
if (existingUser) {
req.flash('form', {
email: req.body.email
});
return done(null, false, req.flash('error', 'An account with that email address already exists.'));
}

var user = new User({
email: req.body.email,
password: req.body.password
});

user.save(function(err) {
if (err) return done(err, false, req.flash('error', 'Error saving user.'));

var token = new Token({ _userId: user._id, token: crypto.randomBytes(16).toString('hex') });
token.save(function (err) {
if (err) return done(null, false, req.flash('error', err.message));
var email = req.body.email;
// Send the email for the token
var message = 'Hello,\n\n' + 'Please verify your account by clicking the link: \nhttp:\/\/' + req.headers.host + '\/confirmation\/' + token.token + '\/' + email + '\n';
sendEmail('"APPNme" noreply@example.com', user.email, 'Account Verification Token', message);
});
var time = 14 * 24 * 3600000;
req.session.cookie.maxAge = time; //2 weeks
req.session.cookie.expires = new Date(Date.now() + time);
req.session.touch();
return done(null, user, req.flash('success', 'A verification email has been sent to ' + user.email + '.')); // stack trace points to this line as the error line.
});
});

})
);

routes/index.js

app.post('/signup', passport.authenticate('signup', {
successRedirect : '/profile', section
failureRedirect : '/signup',
failureFlash : true
}));

最佳答案

您需要添加passport.initialize中间件。
引用:https://scotch.io/tutorials/easy-node-authentication-setup-and-local

// required for passport
app.use(session({ secret: 'ilovescotchscotchyscotchscotch' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions

需要维持的顺序:

文档

  • body解析器
  • 快速 session
  • 需要passport.js
  • Passport .初始化
  • Passport . session
  • 需要路线

关于node.js - 错误 : passport. 初始化()中间件未使用 |在数据库中创建用户但出现此错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696191/

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