javascript 未保存Cookie(Angular 、Express)

llmtgqce  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(145)

在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没有出现在应用程序选项卡中,尽管它是由浏览器在网络选项卡下接收的。

pkwftd7m

pkwftd7m1#

经过测试,chrome(86.0.4240.198)似乎仍然允许在localhost上跨站点cookie,这意味着您的问题不是由新的限制引起的,使用{ useCredentials: true }应该可以正常工作。

相关问题