Reactjs 对passport local的身份验证请求待定

Reactjs 对passport local的身份验证请求待定,reactjs,mongodb,express,authentication,passport-local,Reactjs,Mongodb,Express,Authentication,Passport Local,我正在使用Node、MongDB、Passport、Express和React开发一个身份验证应用程序。我试图在两天内解决此问题,但仍然无法解决。错误是在数据发送到服务器后,服务器不处理该请求。以下是我的配置: Passport本地配置 认证路由器 客户端 服务器端日志 浏览器检查 问题是您使用的passport.use签名方法不正确。正确的是这个: passport.use(new LocalStrategy({ usernameField: 'email', password

我正在使用Node、MongDB、Passport、Express和React开发一个身份验证应用程序。我试图在两天内解决此问题,但仍然无法解决。错误是在数据发送到服务器后,服务器不处理该请求。以下是我的配置:

Passport本地配置

认证路由器

客户端

服务器端日志

浏览器检查


问题是您使用的passport.use签名方法不正确。正确的是这个:

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'passwd'
  },
  function(username, password, done) {
    // ...
  }
而不是这个:

passport.use({
    usernameField: 'username',
    passwordField: 'password'
  }, new LocalStrategy((username, password, done) => {
  ...
}}

我把这个问题修好了。基本上,我们只是在passport的回调函数中处理身份验证。身份验证“local”如下所示:

router.post('/auth/local/login', (req, res, next) => {
   passport.authenticate('local', {
     session: false
    }, (err, user, info) => {
      if(err || !user) return res.status(401).json({
         auth: false,
         msg: "Authentication failed",
         token: null
      }) 
      req.login(user, {session: false}, err => {
         if(err) res.send(err)
      })
      const token = jwt.sign(user.id, key.tokenSecret)
      return res.status(200).json({
        auth: true,
        msg: "Login successfully",
        token: token
      })
   })(req, res)
})
**会话设置为false,因为我们不想在会话中存储用户

现在它工作得很好。在客户端,根据我们从服务器收到的响应,我们将用户重定向到正确的页面。我已经测试了两个:成功和失败


有控制台错误吗?对于FE和BE。可能是CORS标题有问题?没有发现错误。在我的例子中,来自客户端的请求已成功发送到服务器,但服务器未处理任何内容。因此,我认为问题并非来自CORS。用户提交登录按钮后,状态为挂起,1或2分钟后更改为失败。请检查此处:参考Passport中的文档,我认为我的配置正确。因为默认情况下Passport采用两个参数username和password。如果您看到我从上面的服务器端记录的请求数据,它还有两个字段username和password。我和你有相同的想法,错误可能来自我的passport的配置,但一切似乎都很好。
Server started successfully at 3001!
Database connected successfully!
Login info: {"username":"newemail@yahoo.com","password":"123456"}
passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'passwd'
  },
  function(username, password, done) {
    // ...
  }
passport.use({
    usernameField: 'username',
    passwordField: 'password'
  }, new LocalStrategy((username, password, done) => {
  ...
}}
router.post('/auth/local/login', (req, res, next) => {
   passport.authenticate('local', {
     session: false
    }, (err, user, info) => {
      if(err || !user) return res.status(401).json({
         auth: false,
         msg: "Authentication failed",
         token: null
      }) 
      req.login(user, {session: false}, err => {
         if(err) res.send(err)
      })
      const token = jwt.sign(user.id, key.tokenSecret)
      return res.status(200).json({
        auth: true,
        msg: "Login successfully",
        token: token
      })
   })(req, res)
})