Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用PassportJS进行管理员登录_Node.js_Mongodb_Passport.js_Admin - Fatal编程技术网

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