【发布时间】:2019-07-06 06:05:01
【问题描述】:
我在我的 React 应用程序和 Axios 中使用 JWT 来处理 API 调用。我正在寻找一种将令牌存储在 cookie 中的方法,这样每次刷新浏览器时我都不会被重定向到再次登录。
这是我的 Axios 设置和我的登录调用:
let authToken = null;
const axios = axiosAPI.create({
baseURL: baseURL
});
// User login
export const loginUser = (data) => {
return new Promise((resolve, reject) => {
axios.post(`${baseURL}/jwt-auth/v1/token`, data)
.then((res) => {
authToken = res.data.token;
// Adds the token to the header
axios.defaults.headers.common.Authorization = `Bearer ${authToken}`;
resolve(res.data);
})
.catch((error) => {
reject(error);
});
});
};
我不确定应该在哪里设置 cookie 以及如何设置它?
编辑:
我已经使用 js-cookie 重写了我的代码,所以它看起来像评论。
import axiosAPI from 'axios';
import Cookies from 'js-cookie';
let authToken = null;
const axios = axiosAPI.create({
baseURL: `${baseURL}`
});
// Check if user is logged in.
(function () {
if (Cookies.get('token') === null) {
// This means that there's no JWT and no user is logged in.
axios.defaults.headers.common.Authorization = null;
} else {
// This means that there's a JWT so someone must be logged in.
axios.defaults.headers.common.Authorization = `Bearer ${authToken}`;
}
}());
// User login
export const loginUser = (data) => {
return new Promise((resolve, reject) => {
axios.post(`${baseURL}/jwt-auth/v1/token`, data)
.then((res) => {
authToken = res.data.token;
Cookies.setToken('token', authToken);
// Adds the token to the header
axios.defaults.headers.common.Authorization = `Bearer ${authToken}`;
resolve(res.data);
})
.catch((error) => {
reject(error);
});
});
};
但是,这完全阻止了我登录,并且我收到错误“段数错误”。知道为什么这不起作用吗?
【问题讨论】:
-
您不能在 Ajax 调用中设置 cookie。看看我的老问题How to modify Cookie from Ajax call
标签: javascript reactjs cookies jwt axios