NextJs中间件设置后无法读取cookie,需要重新加载页面

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

设置cookie后,中间件无法读取,必须重新加载页面才能读取cookie

为什么会这样?

我像下面这样设置cookie:

import { getCookies, setCookie, deleteCookie, hasCookie } from 'cookies-next';
import { useRouter } from 'next/router';

export default function LoginPage() {

    const router = useRouter()

    const login = () => {
        if (hasCookie('user')) {
            router.push('/');
            return;
        }

        setCookie('user', 'DHamidi-RandomValue')
        router.push('/');
    }

    return <div className="layout">
        <h2>Login</h2>

        <button onClick={login}>
            Add User Info To Cookie.
        </button>
    </div>
}

我要读取中间件中的cookie:

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

// This function can be marked `async` if using `await` inside
export function middleware(request: NextRequest) {
    if (request.cookies.has('user')) return NextResponse.next()
    
    return NextResponse.redirect(new URL('/login', request.nextUrl.clone()))
}

export const config = {
    matcher: '/admin/:path*',
}

注意:

它在开发模式下完美运行(

npm run dev
)。但问题发生在生产模式下(
npm run build => npm run start
)。

如果您想实际查看问题,请克隆这个简单的项目

reactjs cookies middleware next nextjs13
1个回答
0
投票

当您设置cookie时; include path=/ 这样你就可以在不刷新页面的情况下访问cookie。请让我知道它是否有效。

res.setHeader('Set-Cookie',

token=${token}; HttpOnly; Max-Age=${60 * 60}; Path=/; SameSite=None; Secure
);

© www.soinside.com 2019 - 2024. All rights reserved.