Reactjs React中继认证中间件

Reactjs React中继认证中间件,reactjs,typescript,authentication,middleware,relay,Reactjs,Typescript,Authentication,Middleware,Relay,我正在尝试使用react继电器按照react继电器的说明构建react应用程序。在指南中,auth令牌存储在env文件中,我试图从内存中检索令牌,该内存是在用户登录时创建的,并使用上下文API传递给所有组件。我没有将其存储在本地存储器中,并且有一个刷新令牌来自动刷新JWT。 从教程中可以看出,中继环境类不是React组件,因此我无法访问上下文对象。 有没有一种方法可以将令牌从我的上下文传递到中继环境类或任何中间件实现来完成此任务。 非常感谢您的帮助 从'react'导入{useContext}

我正在尝试使用react继电器按照react继电器的说明构建react应用程序。在指南中,auth令牌存储在env文件中,我试图从内存中检索令牌,该内存是在用户登录时创建的,并使用上下文API传递给所有组件。我没有将其存储在本地存储器中,并且有一个刷新令牌来自动刷新JWT。
从教程中可以看出,中继环境类不是React组件,因此我无法访问上下文对象。
有没有一种方法可以将令牌从我的上下文传递到中继环境类或任何中间件实现来完成此任务。
非常感谢您的帮助

从'react'导入{useContext};
从“中继运行时”导入{环境、网络、记录源、存储};
从“axios”导入axios;
从“/app constants”导入{AppConstants};
从“/context/auth-context”导入{AuthContext,AuthSteps}”;
从“./hooks/useCookie”导入{useCookie};
接口响应{
资料:有;
错误:任何;
}
异步函数fetchRelay(参数:{text:any;name:any;},变量:any,_cacheConfig:any){
const authContext=useContext(authContext);//错误-无法访问上下文
const{getCookie}=useCookie();//错误-无法访问上下文
axios.interceptors.request.use(
(配置)=>{
const accessToken=authContext&&authContext.state&&authContext.state.token;
if(accessToken)config.headers.Authorization=`Bearer${accessToken}`;
返回配置;
},
(错误)=>{
承诺。拒绝(错误);
}
);
axios.interceptors.response.use(
(回应)=>{
返回响应;
},
异步(错误)=>{
const originalRequest=error.config;
const refreshToken=getCookie(AppConstants.AUTH\u COOKIE\u NAME);
if(refreshtToken&&error.response.status==401&&!originalRequest.\u重试){
原始请求。_retry=true;
常数响应=等待axios
.post(process.env.REACT\u APP\u REFRESH\u TOKEN\u API\u URL!,{refreshttoken:refreshttoken});
if(response.status==200&&response.data&&response.data.accessToken){
authContext&&authContext.dispatch&&authContext.dispatch({
有效载荷:{
令牌:response.data.accessToken
},
类型:AuthSteps.SIGN\u IN
});
accessToken=response.data.accessToken;
返回axios(原始请求);
}
}
返回承诺。拒绝(错误);
}
);
const data:igraphqresponse=wait axios.post(process.env.REACT\u APP\u GRAPHQL\u URL{
查询:params.text,
变量
});    
if(Array.isArray(data.errors)){
抛出新错误(
`获取GraphQL查询“”时出错${
参数名称
}'带变量'${JSON.stringify(variables)}':${JSON.stringify(
数据错误,
)}`,
);
}
返回数据;
}
导出默认的新环境({
网络:network.create(fetchRelay),
存储:新存储(新记录源(){
gcReleaseBufferSize:10,
}),
});