【问题标题】:How to sign a cookie manually using cookieParser?如何使用 cookieParser 手动签署 cookie?
【发布时间】:2022-05-01 08:44:14
【问题描述】:

为了测试,我需要提供一个带有 HTTP 请求的签名 cookie。这样,我的 Express 应用服务器可以将其视为签名 cookie 并将其放入 req.signedCookies 对象中。

但是我在docs 中找不到合适的方法。

我想做以下事情:

let signed = cookieParser.signYourCookie({ cookieName: 'cookieValue' }, secretString);
// => cookieName=cookieValue.9PuJzypXeGq3tc2fFvlukjgNZ518jk

这是与cookieParser.signedCookie(str, secret)method相反的操作。 ExpressJS 在后台自动执行此操作,但有时需要手动签署 cookie,并且该方法似乎丢失了。

解释我为什么需要这个。我使用Chai-http 并且需要为请求设置一个cookie。我需要它是一个签名的 cookie,所以我的服务器可以找到它 req.signedCookies 对象:

chai.request('http://foo.com')
    .get('/url/path')
    .set('my-signed-cookie', 'value-of-my-signed-cookie')

【问题讨论】:

    标签: node.js express cookies


    【解决方案1】:

    插件没有公开的方法。实际上,这很奇怪。所以我从插件的代码中提取了这部分内容。

    在您的应用中执行:

    var crypto = require('crypto');
    
    function sign(val, secret){
      return val + '.' + crypto
        .createHmac('sha256', secret)
        .update(val)
        .digest('base64')
        .replace(/=+$/, '');
    };
    
    // Pay attention to `s:` prefix. With that, plugin considers it as a signed cookie, apparently 
    .set('cookie', 'my-signed-cookie=s:' + sign('value-of-my-signed-cookie', 'my-cookie-secret'))
    
    // Is equivalent to
    .set('cookie', 'my-signed-cookie=s:value-of-my-signed-cookie.Dq+0CW44ZLfvzVWqEZEcK51X6auKaz771jFy4Zs4lWk')
    

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2015-04-05
      • 2013-11-09
      • 2013-10-14
      • 2019-11-30
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 2020-10-10
      相关资源
      最近更新 更多