我有一个node.js服务器,它应该在客户端的cookie中设置一个令牌。它在Postman中设置令牌,但在我的应用程序中没有。
我尝试在Vue的获取方法中添加“相同来源”和“包含”凭据。它没有帮助。
包括前端vue.js部分
checkLogin(context) {
const token = document.cookie;
console.log("Cookie: " + token); //returns "Cookie: "
fetch(PROXY_URL + BASE_URL + "checkLogin", {
method: "POST"
})
.then(r => r.json())
.then(d => {
console.log(d);
return d;
})
.then(d => {
context.commit("setIsLoggedIn", d.auth);
});
},
login(context, data) {
fetch(PROXY_URL + BASE_URL + "login", {
method: "POST",
body: JSON.stringify(data),
headers: {
Accept: "application/json",
"Content-Type": "application/json"
}
})
.then(r => console.log(r))
}
包括后端node.js部分
//check login
app.post('/checkLogin',(req,res ) => {
passport.authenticate('jwt', { session: false }, (err,
decryptToken, jwtError) => {
if(jwtError != void(0) || err != void(0)) {
res.send({auth: false});
}else{
res.send({auth: true });
};
req.user = decryptToken;
})(req, res);
});
//login
app.post('/login',async (req, res) => {
try{
let user = await db.findUser(req.body);
if(user != void(0) && bcrypt.compareSync(req.body.password, user.password)){
const token = createToken({id: user._id, username: user.username});
res.cookie('token', token, {
httpOnly: false
});
res.status(200).send("You are logged");
} else
res.status(400).send({message: "User not exist or password not correct"});
}catch(e){
console.error("Error: login: ,", e);
res.status(500).send({message: "some error"});
}
});
它没有在cookie中设置令牌,但应该设置。