尝试从 Axios 拦截器重定向 401 错误时,下一个重定向会出错

问题描述 投票:0回答:1

在我使用 Next JS 15 和 React 19 的项目中,我尝试使用拦截器中的 next 重定向进行重定向。但是当我尝试进行此重定向时:

Error: NEXT_REDIRECT
    at <unknown> (file://project/apps/web/lib/axios.ts:36:15)
    at async Object.getProfile (file://project/apps/web/lib/api/user.ts:12:23)
    at async Page (file://project/apps/web/app/dashboard/page.tsx:4:22)
  34 |   async error => {
  35 |     if (error.response && error.response.status === 401)
> 36 |       redirect('/auth/login');
     |               ^
  37 |
  38 |     return Promise.reject(error);
  39 |   }, {
  digest: 'NEXT_REDIRECT;replace;/auth/login;307;'
}

我无法找出此错误的原因。我需要检查 /dashboard 下每个请求中的 401 错误。我在等待你的想法。

我的完整代码:

'use server';

import axios from 'axios';
import { redirect } from 'next/navigation';

import { getSession } from './session';

const baseURL = process.env.NEXT_PUBLIC_BACKEND_URL;

export const axiosInstance = axios.create({
  baseURL,
  headers: {
    'Content-Type': 'application/json',
  },
});

axiosInstance.interceptors.request.use(
  async config => {
    const session = await getSession();

    if (session && session.accessToken) {
      config.headers.Authorization = `Bearer ${session.accessToken}`;
    }

    return config;
  },
  error => {
    return Promise.reject(error);
  },
);

axiosInstance.interceptors.response.use(
  response => response,
  async error => {
    if (error.response && error.response.status === 401)
      redirect('/auth/login');

    return Promise.reject(error);
  },
);

我从AI那里得到了帮助,但除了检查组件中的401错误之外,它没有给我任何建议。我在 Stack Overflow 上找到的解决方案不起作用。

reactjs next.js axios next.js15 nextjs-15
1个回答
0
投票

我在从 RSC 将 Next14 传递到 Next15 的服务器操作中遇到同样的问题 但之前我使用 try/finally 在 Next14 上修复了它:

下一个文档

redirect
内部抛出错误,因此应该在
try/catch
块之外调用它。

Next 13.4 错误:API 路由中的 NEXT_REDIRECT:

export default async function Page() {
    let redirectPath: string | null = null

    try {
        //Rest of the code
        redirectPath = `/dashboard`
    } catch (error) {
        //Rest of the code
        redirectPath = `/`
    } finally {
        //Clear resources
        if (redirectPath)
            redirect(redirectPath)
    }

    return <>{/*Rest of JSX*/}</>
}

我能看到的唯一解决方案是返回所有服务器操作和页面捕获的一些类型错误,以在顶层进行重定向。

© www.soinside.com 2019 - 2024. All rights reserved.