在使用 passport.authenticate
中的 successRedirect
时,Express 应该能够正确地将用户重定向到指定的页面。如果遇到仅重定向到所需页面的问题,可能是由于以下几个原因导致的:
passport.authenticate
是 Passport.js 中的一个中间件函数,用于处理用户身份验证。successRedirect
是一个选项,用于指定身份验证成功后重定向的 URL。
passport.authenticate
的回调函数。passport.authenticate
的回调函数。express-session
中间件。express-session
中间件。passport.authenticate
中间件在正确的路由位置被调用,并且没有被其他中间件干扰。以下是一个完整的示例,展示了如何设置 Passport.js 和 Express 应用以实现登录重定向:
const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const session = require('express-session');
const app = express();
// 配置会话
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: false
}));
// 初始化 Passport 和会话支持
app.use(passport.initialize());
app.use(passport.session());
// 用户模型示例(假设 User 模型已经定义)
const User = require('./models/user');
// 配置本地策略
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.validPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
// 序列化和反序列化用户对象
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
// 登录路由
app.post('/login',
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/login',
failureFlash: true
})
);
// 登录页面路由
app.get('/login', (req, res) => {
res.render('login');
});
// 仪表盘页面路由
app.get('/dashboard', (req, res) => {
res.render('dashboard');
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过以上步骤和示例代码,你应该能够解决 passport.authenticate
中 successRedirect
未按预期工作的问题。如果问题仍然存在,请检查服务器日志以获取更多详细信息。
领取专属 10元无门槛券
手把手带您无忧上云