【问题标题】:express sessions cookie same site typescript error表达会话cookie相同的站点打字稿错误
【发布时间】:2021-11-17 18:26:15
【问题描述】:

我目前在尝试将我的快速会话配置定义为 sameSite:'none' 时遇到打字错误。我目前正在使用 @types/express-session: 1.17.3 并且尝试使用旧版本也失败了。

文档表明我所做的是正确的,但类型定义有些错误。 https://expressjs.com/en/resources/middleware/session.html

在 express-sessions 的 index.d.ts 中,它表明我可以这样使用它,但是我遇到了编译器错误。

用于快速会话的 index.d.ts

 class Cookie implements CookieOptions {
        /** Returns the original `maxAge` (time-to-live), in milliseconds, of the session cookie. */
        originalMaxAge: number;

        maxAge?: number;
        signed?: boolean;
        expires?: Date;
        httpOnly?: boolean;
        path?: string;
        domain?: string;
        secure?: boolean | 'auto';
        sameSite?: boolean | 'lax' | 'strict' | 'none';
    }

我的会话配置:


  const sessionConfig = {
    secret: config.sessionSecret || '',
    resave: false,
    saveUninitialized: true,
    cookie: {
      secure: false, // if set to true tests won't work
      maxAge: 10 * 60 * 1000 * 100000,
      sameSite: 'none',
    },
  };

  if (app.get('env') === 'production') {
    app.set('trust proxy', 1); // trust first proxy
    sessionConfig.cookie.secure = true; // serve secure cookies
  }

  app.use(cookieParser());
  app.use(
    cors({
      origin: config.clientUrl,
      methods: ['POST', 'PUT', 'GET', 'OPTIONS', 'HEAD'],
      credentials: true,
    }),
  );
  app.use(session(sessionConfig));

打字稿错误:

src/loaders/middleware.ts:35:19 - error TS2345: Argument of type '{ secret: string; resave: boolean; saveUninitialized: boolean; cookie: { secure: boolean; maxAge: number; sameSite: string; }; }' is not assignable to parameter of type 'SessionOptions'.
  The types of 'cookie.sameSite' are incompatible between these types.
    Type 'string' is not assignable to type 'boolean | "none" | "lax" | "strict" | undefined'.

【问题讨论】:

    标签: typescript express session cookies samesite


    【解决方案1】:

    也许为sessionConfig 创建一个类型定义,然后为cookie 属性赋予类型CookieOptions

    【讨论】:

      【解决方案2】:

      看起来 typescript 在您的 cookie 配置中概括了 sameSite 的类型。您可以按顺序尝试以下操作:

      立即将sessionConfig 注释为SessionOptions 的预期类型

      const sessionConfig: SessionOptions = {
        // ...
      }
      

      cookie 选项定义为从express-session 导入的CookieOptions 类型

      const cookie: CookieOptions = {
        secure: false,
        maxAge: 10 * 60 * 1000 * 100000,
        sameSite: 'none',
      };
      const sessionConfig: SessionOptions = {
        // ...
        cookie,
      };
      

      或者简单地阻止'none'的类型泛化,使其成为一个常量值

      const sessionConfig: SessionOptions = {
        // ...
        cookie: {
          secure: false,
          maxAge: 10 * 60 * 1000 * 100000,
          sameSite: 'none' as const,
        },
      };
      

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 2022-01-18
        • 2011-01-01
        • 2016-08-20
        相关资源
        最近更新 更多