Dan*_*llo 4 javascript reactjs next.js next-auth
这是产生错误的函数。这是一个从会话中获取令牌的简单函数
4 |
5 | export async function getUserToken() {
> 6 | const session = await getServerSession(authOptions)
| ^
7 |
8 | return session?.user?.token
9 | }
Run Code Online (Sandbox Code Playgroud)
我已经努力了几天,试图找出问题所在。到目前为止,我已经设法将其layout与page试图让我们成为next-auths的 RSC 隔离getServerSession。我需要能够传递会话以在后端发出请求,每当我尝试使用需要会话的 api 调用填充客户端组件时,就会引发错误。
有任何见解或建议的解决方法吗?
这是需要请求填充的主要布局TeamSwitcher
export default async function RootLayout({ children, params: { lng } }: Props) {
const clients = await getClients()
return (
<>
<div className="flex flex-col">
<div className="border-b">
<div className="flex h-16 items-center px-4">
{/* @ts-expect-error Server Component */}
<MainNav
lng={lng}
title={siteConfig.name}
items={siteConfig.mainNav}
/>
<div className="ml-auto flex items-center space-x-4">
<TeamSwitcher clients={clients} />
{/* @ts-expect-error Server Component */}
<UserNav lng={lng} user={user} />
</div>
</div>
</div>
{children}
</div>
</>
)
}
Run Code Online (Sandbox Code Playgroud)
这是 api 调用,一切都非常简单
export async function getClients(): Promise<Client[]> {
const token = await getUserToken()
if (!token) throw Error("Missing token for request")
return await api
.headers({
accept: "application/json",
token,
})
.get("/clients")
.json()
}
Run Code Online (Sandbox Code Playgroud)
小智 6
添加
\nexport const dynamic = "force-dynamic"\nRun Code Online (Sandbox Code Playgroud)\n到您获取ServerSession、Page、Layout 或Route Handler\xe3\x80\x82 的位置
\n如果您直接使用此 api,而不是在 Route Hander 中,那么您需要将上述代码添加到调用它的每个页面,而如果您从组件内部调用它,则根据文档,它将无法工作。因此,如果您需要多次使用它,那么 Route Hander 是更好的选择。
\n\n服务器渲染通常发生在一个地方,因此获取与用户相关的数据需要是动态的。
\n动态路由发生在获取一些数据之后,Next无法直接生成相应的页面或内容,所以同样需要动态指定。
\n| 归档时间: |
|
| 查看次数: |
5466 次 |
| 最近记录: |