javascript - 登录后POST路由不重定向
问题描述
我正在使用登录系统(Passport JS)创建应用程序。我在本地登录时遇到了一点问题。我已经提供了所有必要的代码,但问题是,当我尝试登录(passport-local)时,应用程序将我重定向到错误的路线。使用 Google OAuth 登录没有类似的问题。我的意思是说:
会话配置和护照初始化app.js
:
app.use(
session({
secret: 'session',
resave: false,
saveUninitialized: true,
store: MongoStore.create({
mongoUrl: process.env.MONGO_URI,
// ttl: 10 * 120 // save session for
}),
cookie: {
maxAge: 1000 * 60 * 60 * 24
}
})
)
require('./config/passport')(passport);
require('./config/passport_log')(passport);
// is it even legal to have 2 or more passport configs?
app.use(passport.initialize());
app.use(passport.session());
护照本地配置passport_log.js
:
function(passport) {
const verifyCallback = (username, password, done) => {
LogUser.findOne({username: username}, 'username salt hash')
.then((user) => {
console.log(user)
if (!user) {console.log('invalid'); return done(null, false)}
const isValid = validPassword(password, user.hash, user.salt);
if (isValid) {
console.log('valid')
return done(null, user);
} else {
return done(null, false);
};
})
.catch((err) => {
done(err);
});
};
passport.use(new LocalStrategy(verifyCallback));
passport.serializeUser((user, done) => {
console.log(user)
done(null, user.id);
});
passport.deserializeUser((userId, done) => {
LogUser.findById(userId)
.then((user) => {
console.log('deser')
done(null, user);
})
.catch(err => done(err))
});
}
代码执行后返回“有效”。
/login
POST 和 GET 路由以及/private
GET 路由index.js
:
router.post('/login',
passport.authenticate('local', {
failureRedirect: '/login',
successRedirect: '/private'
})
);
router.get('/login', isNotLogin, (req, res) => {
res.render('view/login');
});
router.get('/private', isLogin, (req, res) => {
res.render('view/private');
});
和身份验证配置来自auth.js
:
module.exports = {
isLogin: function (req, res, next) {
if (req.isAuthenticated()) {
console.log('ok')
return next();
} else {
console.log('not')
res.redirect('/login');
}
},
isNotLogin: function (req, res, next) {
if (!req.isAuthenticated()) {
console.log('isnotok')
return next ();
} else {
console.log('isnotnot')
res.redirect('/private');
}
}
};
它返回not
并isnotok
在控制台中。
尝试登录后,控制台返回:
valid
POST /login 302 156.267 ms - 60
not
GET /private 302 83.408 ms - 56
isnotok
GET /login 200 87.810 ms - 3394
所以它把我重定向到/private
,然后又回到/login
。
老实说,我不知道错误可能出在哪里。
解决方案
推荐阅读
- reactjs - 如何将自定义 CSS 应用于 react-d3-speedometer
- python - 如何使用 RPLY 库解析多行代码?
- python - 如何检测pynput中的按键/释放
- python - Wagtail:将 vanilla Django 模型实例传递给小部件
- java - Android Studio 网格布局无法正常工作
- c++ - 使用函数指针返回地址
- http - 如何向用户的浏览器传达它发出的 POST 请求没有副作用?
- laravel - Laravel 形式未定义
- database - 优化数据库设计以最大化数据冗余并增加信息的可访问性
- mysql - 如何将新条目添加到 mysql 表中,但仅适用于 1 列,同时保留所有其他列数据