Passport.authenticate提供虚假事实

时间:2019-01-24 23:58:48

标签: javascript reactjs passport.js

经过大量配置后,我可以使用本地登录护照方法,但只要可以访问电子邮件和密码,我认为它会跳过检查错误

router.post(
'/login',
  function(req,res, next){
    console.log(req.body.email)


    const validationResult = validateLoginForm(req.body);
    if (!validationResult.success) {
      return res.status(400).json({
        success: false,
        message: validationResult.message,
        errors: validationResult.errors
      });
    }

    return passport.authenticate('local', (err, token, userData) => 
          {
      if (err) {
        if (err.name === 'IncorrectCredentialsError') {
          return res.status(400).json({
            success: false,
            message: err.message
          });
        }

        return res.status(400).json({
          success: false,
          message: 'Could not process the form.'
        });
      }


      return res.json({
        success: true,
        message: 'You have successfully logged in!',
        token,
        user: userData
      });
    })(req, res, next);
  });

在反应方面,即使输入正确的凭据,它也会将登录状态显示为true,但成功则为false

here is the client side code

 _login(username, password){
    axios({
        method:"post",
        url: '/auth/login',
        data: {
            email: username,
            password: password
        }
    }).then(response=>{
        // .post(`/auth/login`, {
        //     username,
        //     password
        // })
        // .then(response =>{
            console.log(response)
            if (response.status ===200){
                this.setState({
                    loggedIn: true,
                    user: response.data.user
                })
             }
         })
}

1 个答案:

答案 0 :(得分:0)

在您定义本地策略的地方查看代码会很有帮助,但是乍一看,err仅在验证请求时发生异常时设置。您应该检查token是否为假,以确保身份验证成功。

从PassportJS文档中:

  

如果身份验证失败,则将用户设置为false。如果有例外   发生时,将设置err。一个可选的info参数将被传递,   包含策略验证提供的其他详细信息   回调。

http://www.passportjs.org/docs/authenticate/#custom-callback