设置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
)。
如果您想实际查看问题,请克隆这个简单的项目
当您设置cookie时; include path=/ 这样你就可以在不刷新页面的情况下访问cookie。请让我知道它是否有效。
res.setHeader('Set-Cookie',
token=${token}; HttpOnly; Max-Age=${60 * 60}; Path=/; SameSite=None; Secure
);