我有两条路线。 其一是
router.get('/',(req,res)=>{
res.render('home/index')
})
另外一个是
router.get('/', checklogin, (req,res)=>{
res.render('home/index',{
email: req.email,
name: req.username,
role: req.role
})
})
这是我的 checklogin 中间件
const checklogin = (req, res, next) =>{
const token = req.cookies.ntoken;
try{
const decoded = jwt.verify(token, process.env.JWT_SECRET);
const {username, email, role} = decoded;
req.username = username;
req.email = email;
req.role = role;
next();
}
catch (err){
console.log(err);
next("Invalid Token")
next()
}
}
module.exports = checklogin;
我想在登录后重定向到 router.get('/', checklogin, (req,res)=>{}) 路由。并在车把页面上显示登录用户的名称。我有 2 种用户类型;管理员和用户。用户可以登录并进行一些增删改查操作,管理员也会做同样的事情。 我尝试在登录后重定向到 router.get('/', checklogin, (req,res)=>{}) 路由。
我尝试在登录后重定向到 router.get('/', checklogin, (req,res)=>{}) 路由。
这是我的登录路线
router.post('/login', (req, res) => {
if (!req.body.email || !req.body.password) {
res.render('auth/login',{
error_msg: 'Please Give Email And Password',
layout: false
})
}
else {
User.findOne({ where: { email: req.body.email } })
.then(user => {
if (!user) {
res.render('auth/login',{
error_msg: 'This Email Is Not Registered',
layout: false
})
} else {
bcrypt.compare(req.body.password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign({
username: user.name,
email: user.email,
role: user.role
}, process.env.JWT_SECRET,{
expiresIn: '1h'
});
res.cookie('ntoken', token,{
httpOnly:true
})
res.redirect('/');
}
else {
res.render('auth/login',{
error_msg: 'Invalid Password',
layout: false
})
}
});
}
}).catch(err => console.log(err));
}
})
我还有其他路线 在admin.js中
router.get("/dashboard", checklogin, async (req, res) => {})
在 user.js 中
router.get("/dashboard", checlogin, async (req, res) => {})
在app.js文件中
const home = require('./routes/home/home');
const admin = require('./routes/admin/admin');
const user = require('./routes/user/user');
app.use('/user', user);
app.use('/', home);
app.use('/admin', admin);
我试过这个。但我在车把页面没有得到我想要的输出..
请帮帮我...
您可以制作一个不同的中间件来解析仅设置
req
用户属性并始终继续路由的令牌。
const parselogin = (req, res, next) => {
try {
const decoded = jwt.verify(req.cookies.ntoken, process.env.JWT_SECRET);
const { username, email, role } = decoded;
req.username = username;
req.email = email;
req.role = role;
} finally {
next();
}
}
然后,对于已登录和未登录的情况,您都可以仅使用这一路由:
router.get('/', parselogin, (req, res) => {
res.render('home/index', {
email: req.email,
name: req.username,
role: req.role
});
});
在未登录的情况下,
req.email
、req.username
和req.role
将是undefined
,所以只要您的模板处理得很好,它就应该可以工作。