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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据护照本地策略发送json数据相关的知识,希望对你有一定的参考价值。

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

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

以上是关于如何根据护照本地策略发送json数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一端点上使用护照 js 本地和基本策略?

节点护照错误:未知身份验证策略“本地登录”

护照本地策略没有被调用

如何在保存到数据库之前对密码进行哈希处理以与护照模块兼容(本地护照)

护照会话不存在

node.js中护照身份验证后如何发送json作为响应