axios给我错误(POST /api/v1/users/token/refresh/ HTTP/1.1“ 401 65),如何解决?

axios give me error (POST /api/v1/users/token/refresh/ HTTP/1.1" 401 65) , How solve it?

提问人:saman barjawand 提问时间:11/11/2023 最后编辑:Drew Reesesaman barjawand 更新时间:11/12/2023 访问量:43

问:

在 Windows 10 中,我使用的是 react-router-dom 5.2.0 和 react-redux 7.2.5 和 react 17.0.2。以及 axios 0.21.4 和 WebStorm 2023.1.3 IDE。

考虑 1 - axiosInstanse.js:

import jwt_decode from 'jwt-decode';
import dayjs from 'dayjs';
import axios from 'axios';
import {updateAccessToken} from '../actions/userActions';
const baseURL = 'http://127.0.0.1:8000';

const axiosInstance = (userInfo , dispatch) => {
    const instance = axios.create({
        'mode': 'cors',
        baseURL,
        headers: {
            'Content-Type': 'application/json',
            Authorization:`Bearer ${userInfo?.access}`,
        }
    });
    instance.interceptors.request.use(async req=> {
        try {
        const user = jwt_decode(userInfo.access);
        const isExpired = dayjs.unix(user.exp).diff(dayjs()) < 5000;
        if (!(isExpired)) {
            return req
        }

            const response = await axios.post(
                '/api/v1/users/token/refresh/' , {refresh:userInfo.refresh},
            );


        dispatch(updateAccessToken(response.data))
        req.headers.Authorization = `Bearer ${response.data.access}`;
        return req;
        } catch (error) {
           console.log(error)
        }
    });
    return instance
}

export default axiosInstance;


考虑 2 - userActions.js:

export const userFurtherInformationAction = (image, gender) => async (dispatch, getState) => {
    try {
        dispatch({ //USER FURTHER INFORMATION REQUEST
            type: USER_FURTHER_INFORMATION_REQUEST,

        });
        const {userLogin: {userInfo}} = getState();
        const formData = new FormData();
        const image_url = URL.createObjectURL(image)

        formData.append('userPicture', image);
        formData.append('sex', gender);
        // var object = {};
        // formData.forEach(function(value, key){
        //     object[key] = value;
        // });

        // var json = JSON.stringify(formData);
        // const config = {
        //     'mode': 'cors', headers: { //
        //         'Content-type': 'multipart/form-data', 'Authorization': `Bearer ${userInfo.token}`
        //     }
        // }
        const authRequestAxios = axiosInstance(userInfo,dispatch);
        const {data} = await authRequestAxios.post('/api/v1/users/complete_user_further_info/', formData);

        dispatch({ //USER FURTHER INFORMATION SUCCESS
            type: USER_FURTHER_INFORMATION_SUCCESS, payload: data,

        });
        localStorage.setItem('userInfo', JSON.stringify(data));
    } catch (error) {
        dispatch({ // USER FURTHER INFORMATION FAILED
            type: USER_FURTHER_INFORMATION_FAILED,
            payload: error.response && error.response.data.detail ? error.response.data.detail : error.message,
        });
    }
}


我希望上传 picutre --> 但在我的前端 -> reactjs -> axios 引发错误[11/Nov/2023 12:55:36] "POST /api/v1/users/token/refresh/ HTTP/1.1" 401 65

使axiosInstance箭头函数后出现此错误...我猜错误出在文件 --> axiosInstance.js

AXIOS http-status-代码

评论


答:

-1赞 Chukwujiobi Canon 11/11/2023 #1

“发布 /api/v1/users/token/refresh/HTTP/1.1” 401 65

Http 请求授权错误,标准指出

401(未授权)状态代码指示尚未应用请求,因为它缺少目标资源的有效身份验证凭据。生成 401 响应的服务器必须发送一个 WWW-Authenticate 标头字段,其中包含至少一个适用于目标资源的质询。

如果请求包含身份验证凭据,则 401 响应指示已拒绝对这些凭据的授权。用户代理可以使用新的或替换的授权标头字段重复请求(第 4.2 节)。如果 401 响应包含与先前响应相同的质询,并且用户代理已尝试至少一次身份验证,则用户代理应向用户提供随附的表示形式,因为它通常包含相关的诊断信息。

因此,请检查此标头是否实际授权了您的请求:Authorization

Authorization: `Bearer ${userInfo?.access}`

评论

0赞 saman barjawand 11/15/2023
这个答案是正确的,但不能解决错误,只能引导我下一个问题......无论如何,谢谢 -> (Chuckwuijobi Canon) ...我应该问一些更详细的问题。
0赞 Chukwujiobi Canon 11/15/2023
我很乐意帮忙