【发布时间】:2021-05-16 14:47:56
【问题描述】:
我正在尝试使用 axios npm 包访问登录 api 这是我的 api 网址http://127.0.0.1:3000/api/v1/users/login'
javascript 代码
const login = async (email, password) => {
console.log(email, password);
try {
const res = await axios({
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
data: {
email, password
},
});
console.log(res);
} catch (err) {
console.log(err.response.data.message);
}
};
当我们在 postman 中使用 api 时 cookie 已保存并显示,但是当我使用 axios 使用此 api 时未保存在浏览器中。
登录 api 代码
使用 jwt 创建令牌
const signToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRE_IN,
});
};
使用res.cookie创建登录令牌并设置cookies
const createSignToken = (user, statusCode, res) => {
const token = signToken(user._id);
const cookieOption = {
expires: new Date(Date.now() + process.env.JWT_COOKIE_EXPIRE_IN*24*60*60*1000),
httpOnly: true
}
if (process.env.NODE_ENV === 'production') cookieOption.secure = true;
res.cookie('jwt',token, cookieOption);
//remove password from the output
user.password = undefined;
res.status(statusCode).json({
status: 'success',
token,
data: {
user,
},
});
};
exports.login = catchAsync(async (req, res, next) => {
const { email, password } = req.body;
//if email and password exits
if (!email || !password) {
return next(new AppError('please provide email and password', 400));
}
//check if user exit and password correct
// const user=User.find({email:email})
const user = await User.findOne({ email }).select('+password');
if (!user || !(await user.correctPassword(password, user.password))) {
return next(new AppError('email or password wrong', 401));
}
//if everything ok send token to client
createSignToken(user, 200, res);
});
【问题讨论】: