如何在 remix run 中从实用程序函数重定向

han*_*man 11 javascript reactjs server-side-rendering remix.run

我正在使用 Remix-run,我想从 auth 实用程序函数重定向到我的登录页面。但它不起作用。这是与我的身份验证实用程序方法类似的功能

import { redirect } from 'remix';

 async function authenticate(request){
  try{
    const user = await rpc.getUser(request);
    return user
  } catch(e){
   console.log(e) // logs error when rpc fails
   if(e.response.status === 401){
    return redirect('/login')
   }
   return redirect('/500')
  }
 }
Run Code Online (Sandbox Code Playgroud)

//component.jsx

import {useLoaderData } from 'remix';

export async function loader({ request }) {
  const user = await auth.authenticate(request);
  return { user };
}

export default function Admin(){
 const { user } = useLoaderData();
  return <h1>{user.name}</h1>
}

Run Code Online (Sandbox Code Playgroud)

如果 auth rpc 失败,我会在日志中收到错误消息。但重定向永远不会发生。如果我将redirect部件移至加载器功能,它将按预期工作。它不仅在效用函数内部工作

han*_*man 15

在深入研究文档和重新混合笑话应用程序演示后。我发现您需要从加载器/操作以外的任何其他函数抛出重定向才能进行重定向。如果需要的话,你也可以抛出 Http 响应。

import { redirect } from 'remix';

 async function authenticate(request){
  try{
    const user = await rpc.getUser(request);
    return user
  } catch(e){
   if(e.response.status === 401){
    throw redirect('/login')
   }
   throw redirect('/500')
  }
 }
Run Code Online (Sandbox Code Playgroud)