在这里完全被难倒了。
使用clerk,我想使用getAuth()帮助程序访问当前用户的userId。
标签:https://clerk.com/docs/references/nextjs/get-auth
pages/api/example.ts
import { getAuth } from "@clerk/nextjs/server";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const { userId } = getAuth(req);
// Load any data your application needs for the API route
return res.status(200).json({ userId: userId });
字符串
现在,当我在浏览器中访问此端点时:
http://localhost:3000/api/example
型
它似乎工作,因为我看到我的浏览器中打印的userId:
{"userId":"user_2Ze2xqQyKbZbsXaZi7cv1sXLf2S"}
型
但是,当我尝试在getServerSideProps函数中调用此API端点时,我收到:{ userId: null }
pages/profile.tsx
export async function getServerSideProps() {
const res = await fetch(`http://localhost:3000/api/example`);
const data = await res.json()
console.log(data) // this logs: { userId: null }
return {
props: {
properties: data,
},
};
}
型
我的中间件文件:
middleware.ts
import { authMiddleware } from "@clerk/nextjs";
export default authMiddleware({
publicRoutes: ["/api/example", "/profile"],
});
export const config = {
matcher: ['/((?!.+\\.[\\w]+$|_next).*)', '/', '/(api|trpc)(.*)'],
};
型
有人能发现问题吗?我一整天都被困在这个问题上。谢谢你的关注
1条答案
按热度按时间qfe3c7zg1#
问题是从
getServerSideProps()
发出的请求将丢失任何标识头/cookie/等。由于API路由处理程序和
getServerSideProps()
都运行在相同的服务器端上下文中,因此不需要发出额外的内部请求。只需在
getServerSideProps
中使用getAuth()
字符串