如何在一个登录页面中创建两个授权用户(管理员,客户)?

时间:2019-01-17 05:14:00

标签: node.js mongodb express admin

我最近为客户创建了一个登录页面。但是现在我想先创建管理仪表板,然后再为管理员创建登录页面。如何在同一登录页面上管理两个授权用户。我在下面附加了我的代码并还提到了文件名。

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);
  });
 }

有人可以告诉我如何在同一页面上开发两个授权的登录系统。如果管理员登录,则系统将重定向到管理员控制台。除非用户登录,否则它将重定向到用户仪表板。

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是在表中为角色创建一个标志,例如为admin用户创建is_admin键。在登录之后,还为用户添加一个检查,即is_admin标志是true还是false。如果为true,则为此创建一个中间件并将该中间件添加到管理员的路由中。