gpt4 book ai didi

reactjs - React Relay Modern 在网络环境中收到 401 错误时重定向到另一个页面

转载 作者:行者123 更新时间:2023-12-03 13:54:08 27 4
gpt4 key购买 nike

我在 ReactJS RelayJS 网络环境中使用 JWT 身份验证。服务器和客户端中的所有 token 检索和处理都很好。我正在使用 React Router v4 进行路由。

我的问题是当我收到来自服务器的Unauthorized 消息(状态代码 401)时。如果用户在 token 过期后指向应用程序页面,即会发生这种情况。我需要做的是重定向到登录页面。这是我希望拥有的代码:

import { Environment, Network, RecordSource, Store } from 'relay-runtime';

const SERVER = 'http://localhost:3000/graphql';

const source = new RecordSource();
const store = new Store(source);

function fetchQuery(operation, variables, cacheConfig, uploadables) {
const token = localStorage.getItem('jwtToken');

return fetch(SERVER, {
method: 'POST',
headers: {
Authorization: 'Bearer ' + token,
Accept: 'application/json',
'Content-type': 'application/json'
},
body: JSON.stringify({
query: operation.text, // GraphQL text from input
variables
})
})
.then(response => {
// If not authorized, then move to default route
if (response.status === 401)
this.props.history.push('/login') <<=== THIS IS NOT POSSIBLE AS THERE IS NO this.history.push CONTEXT AT THIS POINT
else return response.json();
})
.catch(error => {
throw new Error(
'(environment): Error while fetching server data. Error: ' + error
);
});
}

const network = Network.create(fetchQuery);

const handlerProvider = null;

const environment = new Environment({
handlerProvider, // Can omit.
network,
store
});

export default environment;

自然地调用 this.props.history.push 是不可能的,因为网络环境不是 ReactJS 组件,因此没有关联的属性。

我尝试在此时抛出错误,例如:

      if (response.status === 401)
throw new Error('Unauthorized');

但是我在浏览器控制台上看到了错误,并且在代码中无法正确处理该错误。

我想做的就是在收到 401 错误时重定向到登录页面,但我找不到正确的方法。

最佳答案

我没有使用中继,而是使用渲染 Prop 。我遇到过同样的问题。我能够使用窗口对象解决它。

 if (response.statusText === "Unauthorized") {
window.location = `${window.location.protocol}//${window.location.host}/login`;
} else {
return response.json();
}

关于reactjs - React Relay Modern 在网络环境中收到 401 错误时重定向到另一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com