我正在使用Remix,使用独立堆栈模板,我修改了它以使用Express。
我目前正在尝试使身份验证工作,我使用的流与默认使用的流相同,即createCookieSessionStorage流,顾名思义,它使用cookie来存储会话。
当我登录时,会话被正确创建,我可以在cookie中看到它。它看起来像这样:
这一切都很好,我可以从中提取登录用户。
然而,无论何时这个cookie存在,无论何时我输入我的任何路由,都会发生重定向,传递一个set-cookie报头,使这个cookie无效。
首先,在我登录后,set-cookie得到正确设置:
然后,当我访问任何页面,这是发射关闭:
如果我的__session cookie的值是在登录后设置的,就会发生这种情况。我甚至不需要登录,因为即使我手动设置了这个cookie的值,也会发生这种情况。如果我更改了这个值,没有重定向和设置cookie:路径=/被触发。
知道为什么会发生这种情况吗?就好像服务器读取了cookie的值,然后决定删除它。我使用的验证码与混音独立堆栈开始时完全相同,见下文:
export const sessionStorage = createCookieSessionStorage({
cookie: {
name: "__session",
httpOnly: true,
path: "/",
sameSite: "lax",
secrets: ["super-duper-s3cret"],
secure: process.env.NODE_ENV === "production",
},
});
export async function createUserSession({
request,
userId,
remember,
redirectTo,
}: {
request: Request;
userId: string;
remember: boolean;
redirectTo: string;
}) {
const session = await getSession(request);
session.set(USER_SESSION_KEY, userId);
return redirect(redirectTo, {
headers: {
"Set-Cookie": await sessionStorage.commitSession(session, {
maxAge: remember
? 60 * 60 * 24 * 7 // 7 days
: undefined,
}),
},
});
}
再次注意,我不确定这是混音问题还是Express问题,我使用的是带Express的混音。
请让我知道如果需要更多的细节!
先谢谢你!
1条答案
按热度按时间bxpogfeg1#
对
createCookieSessionStorage
的调用为会话cookie设置默认值。当调用
commitSession
时,可以覆盖这些默认值。确保没有将
expires
或maxAge
设置为默认值。