Home > Blockchain >  Why the browser does not be forwarded to "/login" page?
Why the browser does not be forwarded to "/login" page?

Time:12-28

Here is my function:

    import axios from "axios";
    import { redirect } from "react-router-dom";

    let fetch = async (data, method, url, responseType, header) => {
        let requestObj = { "method": method, "url": url }
        if (method.toLowerCase() === "get") {
            requestObj.params = data;
        } else {
            requestObj.data = data;
        }
        if (responseType) {
            requestObj["responseType"] = responseType;
        }
        if (header) {
            requestObj["headers"] = header;
        }
        axios.interceptors.response.use(
            (response) => {
                return response;
            },
            (error) => {
                if (error.response.status === 401) {
                   console.log("Unauthorized");
                   return redirect("/login");
                }else {
                    return error;
                }
            }
        );
        let result = await axios(requestObj);
        return result;
    }

Because the word "Unauthorized" is shown in the console, that means I caught the response status 401, however, it does not forward the browser to the "/login" page, would you tell me why?

PS: I am using "react-router-dom": "^6.4.2".

CodePudding user response:

import axios from "axios";
import { useNavigate } from "react-router-dom";

let navigate = useNavigate();

let fetch = async (data, method, url, responseType, header) => {
    let requestObj = { "method": method, "url": url }
    if (method.toLowerCase() === "get") {
        requestObj.params = data;
    } else {
        requestObj.data = data;
    }
    if (responseType) {
        requestObj["responseType"] = responseType;
    }
    if (header) {
        requestObj["headers"] = header;
    }
    axios.interceptors.response.use(
        (response) => {
            return response;
        },
        (error) => {
            if (error.response.status === 401) {
               console.log("Unauthorized");
               return navigate("/login");
            }else {
                return error;
            }
        }
    );
    let result = await axios(requestObj);
    return result;
}

try to use useNavigate() instead of redirect this should work

CodePudding user response:

You can use browserHistory to redirect to another component

import { browserHistory } from 'react-router-dom';
     
    if (error.response.status === 401) 
    {
        console.log("Unauthorized"); 
        browserHistory.push('/login');
    }
    else 
    { 
        return error;
    }
  • Related