一天的美好时光!需要您对Express.js上运行的个人网站的简单登录/授权提供帮助。登录本身由Password.js处理并运行良好,但在我的身份验证中间件中发生了一些奇怪的事情我无法访问用户的角色存储为Mongo中的数组 - 它始终未定义:
app.get('/admin',
isLoggedIn, //handled by password.js - works ok,
hasRole('admin'), //problem is here
function(req, res){
res.render('admin.handlebars', { layout : 'main.handlebars', user: req.user });
}
);
function hasRole(role){
return function(req, res, next){
console.log(req.user);
/*Output:
{
"_id" : ObjectId("55a8506c3e1cc054c80eb345"),
"name" : "user1",
"passHash" : "$2a$10$E.c1bnIPTXrTMk8nyIeoqO0/0XKRU2pKmaYtLduSvNfngc7nMB7e2",
"roles" : [
"admin", **strong text**
"power-user"
]
}*/
console.log(req.user.roles);
//Output : undefined...
}
}
如果我尝试直接获取数据,则在console.log(req.user)输出中显示数组,但未定义。那么现在我使用一种解决方法 - 将角色存储为逗号分隔的字符串,但是你可以帮助我使用数组吗?
答案 0 :(得分:0)
试试这个:
function hasRole(role){
return function(req, res, next){
var user = JSON.parse(JSON.stringify(req.user));
console.log(user.roles);
}
}
答案 1 :(得分:0)
好吧,多亏了Wilson Balderrama,我找到了解决方案,这很奇怪但是有效:
function hasRole(role){
return function(req, res, next){
var user = JSON.parse(JSON.stringify(req.user));
if(user.roles.indexOf(role) !== -1) next();
else redirect('/access-denied');
}
}