Nextjs 14 响应 cookie 不会返回给客户端

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

我目前正在开发一个项目,该项目主要关注 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

我感谢任何解决方案,或者如果我犯了某种错误,我将很乐意对我的代码进行任何形式的评论:)

谢谢

authentication next.js cookies jwt pocketbase
1个回答
0
投票

我认为不要使用

NextResponse
,而是使用
Response

从这里开始

Next.js App Router 中的路由处理程序不支持使用 NextResponse.next() 方法转发到下一个中间件。

路由处理程序被认为是中间件“链”的末端。 处理程序必须始终返回 Response 对象。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.