用户没有验证,而登录在Reactjs



你好,我是新来的反应。我正在实现reactJs登录系统。我想从后端(MongoDb)验证我的用户,然后显示用户仪表板。我尝试了一些类似的问题,但没有得到我的解决方案

问题是什么

每当我试图登录,通过提供用户名和密码,它重定向到用户仪表板。如果输入错误的电子邮件或密码,它也会进入用户仪表板

what i Tried

我尝试了所有的逻辑,但问题是一样的

Login.jsx(反应)


import React, { useState } from 'react'
import { NavLink } from 'react-router-dom'
import zerotwo from "../images/02.svg"
import { useNavigate } from 'react-router-dom';

const Login = () => {
const navigate = useNavigate()
const [detail, setDetail] = useState({  
email: "",  
password: "",
})
let name, value
const handleInput = (e) => {
name = e.target.name
value = e.target.value
setDetail({ ...detail, [name]: value })
}
const PostData = async (e) => {

e.preventDefault()
const {  email, password } = detail

const res = await fetch("/login", {

method: "POST",
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
email, password
})
})
const data = await res.json()

if (data === 400 || !data) {
alert("not registered")
navigate('/')
} else {
alert("Sucesssfuly")
navigate('/dashboard')
}
}

app.js(后端)

router.post("/login", async (req, res) => {
let token
try {
const { email, password } = req.body
if (!email || !password) {
return res.status(400).json({ message: "fill the credentials" })
}
const UserLogin = await User.findOne({ email: email })
if (UserLogin) {
const passmatch = await bcrypt.compare(password, UserLogin.password)
token = await UserLogin.generateAuthToken()
// console.log(token);
res.cookie("jwt",token,{
expires : new Date(Date.now()+25892000000),
httpOnly : true
})
if (!passmatch) {
res.status(400).json({ error: "Invalid credentials" })
}
else {
res.status(200).json({ message: "sign in successfully" })
}
} else {
res.status(400).json({ error: "Invalid credentials" })
}
} catch (err) {
console.log(err);
}
})

我在验证用户名和密码时尝试了所有的逻辑。我期望通过他/她的用户名和密码正确验证用户

您正在检查状态代码上的data对象-data === 400,但它永远不会为真,因为如果信用无效,您将返回对象{ error: "Invalid credentials" }。您可能想要检查响应状态码,所以它应该是

if (res.status === 400)

另外,旁注-我建议为身份验证错误(错误的密码)返回401状态码,它是专门为这种情况设计的,并且是标准的。在这种情况下,400可以是空的usernamepassword-这是有意义的,因为400错误更多的是为了验证。

最新更新