reactjs - 对所有 Axios 请求使用 Auth0 React Hook
问题描述
我已经按照他们的快速入门教程使用 React 设置了 Auth0。
基本上,我的 React 应用程序被包裹在他们的 Context Provider 周围,我可以访问我useAuth0
的任何组件中的钩子。
这就是我向我的 API 发出请求的方式:
const TestComponent = () => {
const { getTokenSilently } = useAuth0();
const getObjectsFromAPI = async () => {
const token = await getTokenSilently();
const axiosConfig = {
headers: {
Authorization: "Bearer " + token
}
};
const response = await axios.get(
"/api/objects/",
axiosConfig
);
// ... do something with the response
};
return ... removed code for brevity
};
有没有一种方法可以在不必在每个请求上写token
and的情况下axiosConfig
提出请求?
我知道我可以使用配置初始化一个新的 axios 实例,但是我不能useAuth0
在 Context Provider 之外使用钩子。
解决方案
但我不能在上下文提供程序之外使用 useAuth0 挂钩。
是的,不知道如何避免每个请求生成令牌,但您可以通过将令牌传递给共享的 axios 实例来保存 axios 配置部分,例如:
http.js
const instance = axios.create({
// your config
});
export const authorized = (token) => {
instance.defaults.headers.common['Authorization'] = `Bearer ${token}`;
return instance;
}
在你的组件中:
import http from '/path/to/above/http.js';
const TestComponent = () => {
const { getTokenSilently } = useAuth0();
const getObjectsFromAPI = async () => {
const token = await getTokenSilently();
const response = await http
.authorized(token)
.get('/api/objects/');
// ...
};
};
推荐阅读
- vb.net - 如何防止重复减法?
- node.js - 是否可以通过 Node 或 Shell 脚本向 bash_profile 添加行?
- angular - ionic 4 表单控制问题未在输入中显示值
- c++ - 调用 shared_ptr 对象方法
- jquery - jQuery 在 Edge 中无法使用的天数
- angular - Angular Spring Oauth2无效的凭据
- python-3.x - 绘制圆弧的 y 值
- c# - 当我使用变量时使用 ExecuteScalar() 选择不起作用,总是返回空,当我不使用变量时它起作用 - C#
- flutter - 我的 RenderFlex 底部溢出了 57 个像素
- c# - 嵌套静态类的属性