1

我目前有现有的 Laravel 后端,它返回 JWT 令牌并使用 data.accessToken = data.access.token 在登录回调下设置它。我还可以通过以下方式检索令牌并发送到私有端点:

const [session] = useSession()
ApiClient.get(`${API_URL_PREFIX}/insert/data`, { headers: { Authorization: 'Bearer ' + session.accessToken }, params: params })

但这仅在 React 挂钩中可用,但我需要发送它,并且我在另一个文件中有 axios 调用,代码如下:

import axios from 'axios';

const env = process.env.NODE_ENV;
const dev = env !== 'production';
const apiHost = dev ? 'http://localhost:8000/' : '/';

const ApiClient = axios.create({ baseURL: '/' });

export { ApiClient, apiHost };

如何从这个单独的文件中获取访问令牌并将其作为使用 API 客户端的每个请求的默认标头发送?

对于来自服务器的无效请求,还有什么推荐的方法吗?例如,如果我得到 401,我在哪里可以捕捉到这个并重定向回登录页面?

您要做什么尝试为来自单独库的每个请求发送访问令牌,如果未针对私有端点请求进行身份验证,则重定向到登录页面。

复制导入 axios,在 Next Auth 中使用凭证提供程序和自定义后端返回 JWT 令牌。将 signIn 回调中 JWT 的结果映射到数据,以便可以将其保存在用户会话中以供以后检索。

反馈在文档中似乎缺乏完整的示例,其中自定义后端具有凭据提供程序,具有私有端点处理和检索,为在单独的 API 请求中完成的请求封装访问令牌。最好有端到端的例子,我们可以参考实现处理所有这些场景。

4

1 回答 1

0

我已经写了一篇文章,详细介绍了如何在此处使用带有自定义后端的凭据提供程序

关于为所有请求使用默认标头,我建议添加自定义 React 钩子。您将能够在其中使用 nextauth.js 中的 useSession() 挂钩,然后您可以使用该自定义挂钩来满足所有数据获取要求。

于 2021-01-22T12:56:20.503 回答