【发布时间】:2021-11-24 11:53:01
【问题描述】:
如果请求代码等于 401,我的目标是重定向用户。我编写了以下代码,但它显示错误 401。它显示我 401(来自 console.log,但低于错误)。如果错误等于 401,如何实现重定向?
import axiosConfig from "../../config/axios";
import actions from "./actions";
import { Redirect } from "react-router";
const fetchUser = async () => {
const response = await axiosConfig.get('api/get-user')
.catch(function (error) {
console.log(error.response.status) // 401
console.log(error.response.data.error) //Please Authenticate or whatever returned from server
if (error.response.status == 401) {
return(
<Redirect
to={{
pathname: '/login',
state: { from: location },
}}
/>
);
}
});
return response.data
}
export const getUser = () =>
async (dispatch) => {
const user = await fetchUser()
dispatch(actions.setUser(user));
}
@更新 路由设置
const Container = () => {
return (
<div className="container">
<Router>
<Switch>
<Route path="/login">
<Login />
</Route>
<Route path="/register">
<Login />
</Route>
<Route path="/all-users">
<Alltasks />
</Route>
<Route path="/all-articles">
<AllUsers />
</Route>
</Switch>
</Router>
<ToastContainer />
</div>
);
}
【问题讨论】:
-
您需要访问
history对象并调用命令式重定向,即history.replace。你能分享你的主路由器设置吗?您还可以分享fetchUser的调用位置和方式吗? -
fetchUser 在上面的代码中被调用。如果我考虑过 getUser 函数,请查看它是 Redux 的代码。所以Containercontroller(它在哪里路由)我在mapDispatchToProps和useEffect()中使用它。我更新了我的帖子
-
啊,是的,我现在明白了,谢谢。你能分享一下你是如何设置你的
Router的吗?我怀疑你需要将history对象传递给getUser动作创建者,或者创建一个全局的、可导入的history对象。 -
看mu代码
标签: reactjs redirect axios http-status-code-401