【问题标题】:Nestjs websocket gateway, how to parse signed cookies from handshake for guard authorization?Nestjs websocket网关,如何从握手中解析签名cookie以进行保护授权?
【发布时间】:2020-04-13 18:27:57
【问题描述】:

我的守卫包含以下代码:

    let client: Socket = context.switchToWs().getClient();
    const sessionCookie = client.handshake.headers.cookie
      .split('; ')
      .find((cookie: string) => cookie.startsWith('session'))
      .split('=')[1];

    const sessionId = cookieParser.signedCookie(
      sessionCookie,
      process.env.CryptoKey,
    );

    console.log('SESSION ID',sessionId);

调用 cookieParse.signedCookie(); 后生成的 sessionId 仍然是签名的;

client.request.cookies 和 signedCookies 都是未定义的。

会话 id 在那里,cookie 正在由浏览器发送,但我无法在网关中解析它。

【问题讨论】:

    标签: node.js cookies socket.io nestjs nestjs-gateways


    【解决方案1】:

    我遇到了同样的问题并找到了答案。您的代码很接近,但cookieParser.signedCookie(...) 再次返回签名 cookie 的原因是因为 cookie 值中的某些字符被编码。所以它不会将字符串检测为签名的 cookie。

    要解决此问题,您必须改为将 decodeURIComponent(sessionCookie) 传递给 cookieParser。

        let client: Socket = context.switchToWs().getClient();
        const sessionCookie = client.handshake.headers.cookie
          .split('; ')
          .find((cookie: string) => cookie.startsWith('session'))
          .split('=')[1];
    
        const sessionId = cookieParser.signedCookie(
          decodeURIComponent(sessionCookie),
          process.env.CryptoKey,
        );
    
        console.log('SESSION ID',sessionId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2012-08-26
      • 2013-04-25
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多