在chrome开发工具〉网络〉cookie中接收到Cookie,但未在应用程序〉cookie中显示
我有一个登录函数,当用户登录时设置一个cookie。它出现在网络选项卡下的cookie列中,但不出现在应用程序选项卡中。
这是express中处理cookie设置的函数。当有post请求发送到/login/
路由时调用此函数。
const loginUser = async (req, res) => {
const dbRes = await authenticateUser(req.body);
if (dbRes.authenticated === true) {
res.setHeader(
"set-cookie",
`session=${dbRes.cookie};
path=/; samesite=lax`
);
// I've also tried using res.cookie()
res.status(200).json({ status: "authenticated" });
} else if (dbRes.authenticated === false) {
res.status(401).json({ status: "wrong username, email or password" });
} else {
res.status(dbRes.status).json({ error: dbRes.error });
}
};
Cookie设置工作如预期,当我这样做,我去浏览器中的/cookie/
路由。
app.use("/cookie/", (req, res) => {
res.setHeader("set-cookie", "foo=bar");
res.send("set");
});
我有一个Angular 前端发送一个后请求到/login/
路由,但登录路由是未定义在我的Angular 应用程序,所以用户将被重定向到/
路由。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserLoggedInGuard } from './guards/user-logged-in.guard';
const routes: Routes = [
{
path: '',
loadChildren: () =>
import('./features/login/login.module').then((m) => m.LoginModule),
},
{
path: 'feed',
loadChildren: () => import('./feed/feed.module').then((m) => m.FeedModule),
canActivate: [UserLoggedInGuard],
},
{
path: '**',
redirectTo: '',
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
但是express设置的/cookie/
路由没有被重定向,cookie设置正确,我想知道angular路由器和express路由器之间是否存在冲突,导致cookie设置出现问题。
我需要帮助来理解为什么cookie没有出现在应用程序选项卡中,尽管它是由浏览器在网络选项卡下接收的。
1条答案
按热度按时间pkwftd7m1#
经过测试,chrome(86.0.4240.198)似乎仍然允许在localhost上跨站点cookie,这意味着您的问题不是由新的限制引起的,使用
{ useCredentials: true }
应该可以正常工作。