有一个应用程序需要登录和注册。现在所有的API请求都正确返回正确的数据。当尝试将返回的数据保存到localstorage时出现问题。当尝试登录时,返回数据(即:令牌)将不保存到本地存储,unless e.preventDefault()在调用signin
函数之前应用。现在数据从后端拉取,但在客户端不会保存到localstorage。提交登录表单后,localstorage刷新没有保存任何东西。现在如果应用了prevent default,它将正确地保留。有没有办法在没有e.preventDefault()的情况下保存本地存储令牌?
现在我知道它确实与API .then((d)=>{...})
部分有关。如果我将其更改为.then(localstorage.setItem("token", 1)
。它在没有e.preventDefault()的情况下完美保存。
Login.js
import { signup, signin } from "../pages/api/index.js";
const [form, setForm] = useState({
email: "",
password: "",
});
const handleSumbit = (e) => {
//e.preventDefault(); //if this is applied localstorage token will stay
signin(form)
.then((d) => {
localStorage.setItem("token", JSON.stringify(d.data));
})
.catch((e) => {
console.log("error");
});
};
字符串
api.js
export const signin = async (data) => {
return await axios.post("http://localhost:5010/signin/", data);
};
型
后端sign.js
export const signin = async (req, res) => {
const data = req.body;
const email = data.email.trim().toLowerCase();
const username = data.username;
const user = await User.findOne({
$or: [{ email }, { username }],
});
if (!user) {
return res.status(404).json({ error: "Error / Cannot find User" });
}
const valid = await bcrypt.compare(data.password, user.password);
if (!valid) {
return res.status(404).json({ error: "Wrong/Error with Credentials" });
} else {
//create and return json web token
//res.send(jwt.sign({ id: user._id }, process.env.JWT_SECRET));
return jwt.sign({ id: user._id }, process.env.JWT_SECRET);
}
};
型
1条答案
按热度按时间qij5mzcb1#
字符串