如何根据护照本地策略发送json数据

问题描述 投票:3回答:1

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

现在我想在每种情况下发送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...!'})
            }
        });
    });
  }
));

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

node.js callback passport.js passport-local
1个回答
1
投票

本地策略将使用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);
    });
© www.soinside.com 2019 - 2024. All rights reserved.