Node.js 使用PassportJS进行管理员登录
伙计们,我可以让用户注册和登录。但是我想做一个管理员登录。这个管理员也将是一个用户。所以我试着做了一个Node.js 使用PassportJS进行管理员登录,node.js,mongodb,passport.js,admin,Node.js,Mongodb,Passport.js,Admin,伙计们,我可以让用户注册和登录。但是我想做一个管理员登录。这个管理员也将是一个用户。所以我试着做了一个ensureAdmin函数。但它不起作用。İt始终重定向到登录页面 passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, function(username, password, done) { User.find
ensureAdmin函数
。但它不起作用。İt始终重定向到登录页面
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
bcrypt.compare(password, user.password, function(err, isMatch){
if(err) throw err;
if(isMatch){
return done(null, user);
} else {
return done(null, false, {message: 'Wrong password'});
}
});
});
}
));
function ensureAdmin(req, res, next){
User.find({"username":"Alp"}
).exec(function(user){
if(req.user = user){
req.isAuthenticated()
return next();
} else {
req.flash('danger', 'Please Login');
res.redirect('/login');
}
});
}
有人能帮我解决这个问题吗?在
ensureAdmin
函数中,我看到if语句中有一个错误
if(req.user = user) ...
除此之外,您正在完成流程
User.find({“username”:“Alp”})
query将始终返回用户名为Alp
的用户。因此,您可以像这样重写函数:
function ensureAdmin(req, res, next){
if(req.user.username === 'Alp'){
req.isAuthenticated()
return next();
} else {
req.flash('danger', 'Please Login');
res.redirect('/login');
}
}
据我了解,
- 将一个新字段作为
isAdmin
- 然后,创建一个新的中间件,名为
ensureAdmin
app.post("/signin", passportLogin, ensureAdmin, controller.signin);
这将首先从
passportLogin
检查用户身份验证,并将用户文档推送到该路径req.user
。现在,我们的中间件ensureAdmin
开始游戏。它将检查管理员状态isAdmin
。如果isAdmin
为真,它将推送到我们的控制器函数,否则将推送到错误处理程序。在我的添加/文章/路线中,您在哪里调用了ensureAdmin?(获取)
app.post("/signin", passportLogin, ensureAdmin, controller.signin);