我最近为客户创建了一个登录页面。但是现在我想先创建管理仪表板,然后再为管理员创建登录页面。如何在同一登录页面上管理两个授权用户。我在下面附加了我的代码并还提到了文件名。
routes / users.js
// Passport
passport.use(new LocalStrategy(
function(username,password, done){
Customer.getUserByUsername(username, function(err,user){
if(err) throw err;
if(!user){
return done(null, false, {message: 'Unknown User'});
}
Customer.comparePassword(password,user.password,function(err, isMatch){
if(err) throw err;
if(isMatch){
return done(null, user);
} else {
return done(null, false, {message:'Invalid password'});
}
});
});
}));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
Customer.getUserById(id, function(err, user) {
done(err, user);
});
});
router.post('/login',
passport.authenticate('local',{successRedirect:'/home',
failureRedirect:'/login',failureFlash: true}),
function(req,res){
res.redirect('/home');
});
在我的模型模式代码下面。
var UserSchema = mongoose.Schema({
name: {
type:String
},
username: {
type: String,
unique: true
},
email:{
type: String
},
password:{
type: String
},
confirmpassword : {
type: String
}
});
var Customer = module.exports = mongoose.model('Customer',UserSchema);
module.exports.createUser = function(newUser,callback){
bcrypt.genSalt(10,function(err,salt){
bcrypt.hash(newUser.password,salt,function(err,hash){
newUser.password = hash;
newUser.save(callback);
});
});
}
module.exports.getUserByUsername = function(username, callback)
{
var query = {username: username};
Customer.findOne(query,callback);
}
module.exports.getUserById = function(id, callback)
{
Customer.findById(id,callback);
}
module.exports.comparePassword = function(candidatePassword, hash,
callback)
{
bcrypt.compare(candidatePassword, hash, function(err, isMatch){
if(err) throw err;
callback(null, isMatch);
console.log(isMatch);
});
}
有人可以告诉我如何在同一页面上开发两个授权的登录系统。如果管理员登录,则系统将重定向到管理员控制台。除非用户登录,否则它将重定向到用户仪表板。
答案 0 :(得分:0)
我认为最简单的方法是在表中为角色创建一个标志,例如为admin用户创建is_admin键。在登录之后,还为用户添加一个检查,即is_admin标志是true还是false。如果为true,则为此创建一个中间件并将该中间件添加到管理员的路由中。