react前端axios使用jwt token依然401 踩坑

调试完成Django drf jwt授权后在前端使用token请求授权接口依然是401,没有直接处理完成,记录处理过程以便分析

请求与生成token供前端使用参见《前后端分离使用drf jwt的token鉴权

准备

axios使用用户名与密码获取token 并存储在localstorage中

    let user = 'testuser'
    let pass =  'testpassword'
    axios.post('http://localhost:8008/Plum/getToken',{
        username:user,
        password:pass
    }).then(res =>{
        const {token } = res.data;
        localStorage.setItem('token',token)
        setAuthToken(token)
    })

//setAuthToken 如下 设置供后续接口使用
function setAuthToken(token){
    if(token){
     // axios.defaults.headers.common['Authorization'] = token ; 
      axios.defaults.headers.common['Authorization'] = "JWT "+token ; //最后修改代码为
    }else{
      delete axios.defaults.headers.common['Authorization'];
    }
}
</
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React使用Axios的过程中,如果要刷新Token并重新请求接口,可以采用以下两种方式: 1.使用拦截器:Axios提供了interceptors拦截器,可以在请求或响应被处理前对它们进行全局的拦截和处理。可以在请求拦截器中判断Token是否过期,如果过期,则先刷新Token,然后再重新发起请求。示例代码如下: ``` axios.interceptors.request.use( (config) => { const token = localStorage.getItem("token"); if (token) { // 判断Token是否过期,如果过期则刷新Token const decodedToken = jwt_decode(token); const currentTime = Date.now() / 1000; if (decodedToken.exp < currentTime) { // 刷新Token的代码 } config.headers.Authorization = `Bearer ${token}`; } return config; }, (error) => { return Promise.reject(error); } ); ``` 2.使用Promise.all():Promise.all()方法接收一个Promise对象的数组作为参数,并返回一个新的Promise对象。当所有的Promise对象都成功时,新的Promise对象才会成功;当有一个Promise对象失败时,新的Promise对象就会失败。可以在Promise.all()方法中同时发起原始请求和刷新Token的请求,当Token刷新后再重新发起原始请求。示例代码如下: ``` const refreshTokenPromise = axios.post("/api/refreshToken"); const originalPromise = axios.get("/api/someApi"); Promise.all([refreshTokenPromise, originalPromise]) .then((responses) => { const originalResponse = responses[1]; // 处理原始请求的响应数据 }) .catch((error) => { // 处理错误 }); ``` 以上是两种处理方式,你可以根据实际情况选择适合自己的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值