Reactjs 对passport local的身份验证请求待定
我正在使用Node、MongDB、Passport、Express和React开发一个身份验证应用程序。我试图在两天内解决此问题,但仍然无法解决。错误是在数据发送到服务器后,服务器不处理该请求。以下是我的配置: Passport本地配置 认证路由器 客户端 服务器端日志 浏览器检查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
问题是您使用的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)
})