Nodejs 验证用户后网页重定向错误
Nodejs 验证用户后网页重定向错误
if(varify){
req.session.logged_in=true;
req.session.user=username;
console.log(‘u:’+req.session.user);
// req.session.sucess=‘success,you may logout<a href="/logout">logout</a>’;
res.redirect(’/admin’,false);
上面是在/admin/login页面的操作,如果验证用户名密码成功,应该要跳转到/admin页面,实际并没有跳转,但是刷新一下页面后会正常跳转。 希望大家能够给出一些见解,感激不尽。
当然,可以帮你解决这个问题。根据你提供的代码片段,看起来你在使用 Express 框架,并且在用户验证成功后尝试进行重定向。然而,你遇到了一个重定向错误。
可能的原因
- 异步操作未完成:如果你的验证过程是异步的(例如,从数据库查询),可能是因为异步操作尚未完成,你就调用了
res.redirect
。 - 中间件顺序问题:确保你的中间件按正确的顺序执行。
- 重定向标志:
res.redirect
的第二个参数是可选的,默认情况下它会发送一个 HTTP 状态码302
,表示临时重定向。你传递了false
,这可能是导致问题的原因。
示例代码及解释
假设你使用的是 Express 框架,以下是一个改进后的示例:
const express = require('express');
const app = express();
app.use(express.json()); // 用于解析 JSON 请求体
app.use(express.urlencoded({ extended: true })); // 用于解析 URL 编码的请求体
app.post('/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
// 这里只是一个示例验证逻辑,你需要替换为你自己的验证逻辑
if (username === 'admin' && password === 'password') {
req.session.logged_in = true;
req.session.user = username;
console.log('u:' + req.session.user);
// 正确的重定向方式
res.redirect(302, '/admin');
} else {
res.status(401).send('Invalid credentials');
}
});
app.get('/admin', (req, res) => {
if (req.session.logged_in) {
res.send('<h1>Welcome Admin!</h1>');
} else {
res.redirect('/login');
}
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
- 中间件:我们添加了
express.json()
和express.urlencoded()
中间件来处理 JSON 和 URL 编码的请求体。 - 登录路由:
/login
路由处理用户的登录请求。如果验证成功,则设置会话变量并重定向到/admin
页面。 - 重定向状态码:
res.redirect(302, '/admin');
使用了默认的302
状态码进行重定向。 - 管理员路由:
/admin
路由检查用户是否已登录,如果没有,则重定向回登录页面。
通过这种方式,你应该能够正确地实现用户验证后的重定向。
代码贴完整。这么一点看不出什么的。
res.redirect(’/admin’,false); 后面有return吗?
res.redirect(’/admin’) 就行了呗。 res.redirect([status], url) <—用法。 所以说你的 res.redirect(’/admin’,false); 我看不太懂。
改成
return res.redirect('/admin')
试试
是因为前面有输出
我觉得不需要RETURN。RES可以直接用。我的RES经常封装在各种函数里。
请问你最后怎么解决的, 我也出现登录后需要跳转的问题
根据你的描述,问题可能是由于 res.redirect('/admin', false);
中的第二个参数 false
导致的。默认情况下,res.redirect()
的第二个参数是 true
,表示进行一个 HTTP 302 重定向。如果你设置为 false
,那么不会执行重定向。
你可以尝试修改代码,去掉第二个参数,让其默认为 true
:
if (varify) {
req.session.logged_in = true;
req.session.user = username;
console.log('u:' + req.session.user);
res.redirect('/admin');
}
另外,确保 /admin
路由已经正确配置并且可以访问。以下是简单的 Express 路由配置示例:
const express = require('express');
const app = express();
app.get('/admin', (req, res) => {
if (req.session.logged_in) {
res.send('Welcome to the admin panel!');
} else {
res.redirect('/admin/login');
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过这些调整,你应该可以解决重定向问题。