我目前正在开发一个项目,该项目主要关注 Nextjs api 路由器(我过去主要使用 Node 和 Express) 我正在尝试使用 pocketbase 作为我的自定义数据库来验证用户。 我正在使用电子邮件和密码进行用户身份验证,然后将用户数据存储在会话中,如下所示:
import { encrypt } from "@/lib/actions";
import { db } from "@/pocketbase";
import { NextResponse, NextRequest } from "next/server";
import { serialize } from 'cookie'
export async function POST(request: NextRequest) {
try {
const values = await request.json();
const { record } = await db.collection("users").authWithPassword(values.email, values.password);
const expires = new Date(Date.now() + 30 * 1000 * 60 * 24);
/* the encrypt function mainly just to sign a JWT contract */
const session = await encrypt({ record, expires });
const response = NextResponse.json({ session }, {
status: 200, headers: {
'Set-Cookie': serialize('session', session, { expires })
}
});
return response;
} catch (err: any) {
return NextResponse.json({ message: err.message }, { status: 400 })
}
}
我的问题是 cookie 根本不会被发送回客户端,每当我尝试任何不同的方法发送 cookie 时它也不起作用
已经过去几个小时了,我对此感到沮丧
有关更多上下文:我尝试通过此 getSession 辅助函数访问会话:
export async function getSession() {
const session = cookies().get('session')?.value;
if (!session) return null;
return await decrypt(session);
}
然后我尝试在 AuthProtected 组件中访问它:
import { getSession } from "@/lib/actions";
import { redirect } from "next/navigation";
export default async function AuthProtected({ children }: { children: React.ReactNode }) {
const session = await getSession();
console.log(session);
return <>{children}</>
}
我在服务器控制台中看到
null
我感谢任何解决方案,或者如果我犯了某种错误,我将很乐意对我的代码进行任何形式的评论:)
谢谢
我认为不要使用
NextResponse
,而是使用 Response
Next.js App Router 中的路由处理程序不支持使用 NextResponse.next() 方法转发到下一个中间件。
路由处理程序被认为是中间件“链”的末端。 处理程序必须始终返回 Response 对象。