如何在 passport 本地策略下发送 json 数据

how to send json data under passport local strategy

这是我的护照登录处理程序。

现在我想在每种情况下发送 JSON 数据,以便 API 可以访问响应并代表此在前端显示任何内容。

//Login Handler
passport.use('local-user', new LocalStrategy(
  function(username, password, done) {
    User.getUserByUsername(username, function(err, user){
        if(err) {
            console.log('error')
            logger.log('error', 'Error Generates on User.getUserByUsername Query on users.js file');
            throw err;
        }
        if(!user){
            //res.send('unknown user');
            console.log('Unknown User');
            return done(null, false, {message: 'Unknown User'});
        }
        User.comparePassword(password, user.password, function(err, isMatch){
            if(err) {
                logger.log('error', 'Error Generates on User.comparePassword Query on users.js file');
                throw err;
            }
            if(isMatch){
                return done(null, user);
            }else{
                return done(null, false, {message: 'Invalid Credential, please check carefully...!'})
            }
        });
    });
  }
));

有人对此有任何想法吗?提前致谢

本地策略将通过 done() 传递用户或错误,然后您通过回调接收它并用 res.json()

打包

这是我的实现。有帮助吗?

passport.use(
      new LocalStrategy(
        {
          usernameField: "email"
        },
        function(username, password, done) {
          User.findOne({ email: username }, function(err, user) {
            if (err) {
              return done(err);
            }
            if (!user) {
              return done(null, false, {
                email: "Email not found"
              });
            }
            if (!user.validPassword(password)) {
              return done(null, false, {
                password: "Password is wrong"
              });
            }
            return done(null, user);
          });
        }
      )
    );

    router.post("/login", function(req, res) {
      passport.authenticate("local", function(err, user, info) {
        if (err) {
          res.status(404).json(err);
          return;
        }

        if (user) {
          const token = user.generateJwt();
          res.status(200);
          res.json({
            userInfo: user,
            token: token
          });
        } else {
          res.status(401).json(info);
        }
      })(req, res);
    });