【问题标题】:Signing cookies in express在 express 中签署 cookie
【发布时间】:2019-02-16 12:42:02
【问题描述】:

如果我正确理解了 cookie 签名,那么它的作用是: 设置 cookie 时使用秘密签名。 使用相同的秘密对 cookie 取消签名,以验证它在接收时没有被更改。

现在在expressjs 中有res.cookie() 来设置cookie,它需要一个“签名”布尔值来设置cookie 是否应该被签名。

现在,什么秘密用于签名?我认为它可能会使用提供给cookieParser() 的秘密,但这实际上并没有在任何地方的文档中明确提及。

所以我的问题本质上是:如何设置用于在 expressjs 中签名 cookie 的秘密?

我确实阅读了 express 文档并在 google 和 stackoverflow 中搜索了答案,如果我遗漏了一些明显的内容,请见谅。

【问题讨论】:

    标签: node.js express cookies


    【解决方案1】:

    Express 确实会使用提供给cookie-parser 的秘密来签署您的 cookie。 Cookie 解析器将inject the secret into your request object。然后,快递将use it in order to sign the cookie。如果没有向 cookie-parser(或其他中间件)提供秘密,则 express 在尝试设置新的签名 cookie 时将 throw an error

    回答你的问题,这就是你应该如何设置秘密(使用cookie-parser):

    var express = require('express')
    var cookieParser = require('cookie-parser')
    
    var app = express()
    app.use(cookieParser('your-secret'))
    
    app.get('/', (req, res, next) => {
      res.cookie('name', 'value', { signed: true })
      res.json({})
    })
    

    然后它将在req.signedCookies 中可用。

    【讨论】:

      【解决方案2】:
      var express      = require('express')
      var cookieParser = require('cookie-parser')
      
      var app = express()
      app.use(cookieParser('yourSecretGoesHere'))
      

      参考:https://www.npmjs.com/package/cookie-parser

      【讨论】:

        【解决方案3】:

        这个cookieParser() 带有秘密和选项。对于已签名的 cookie,您可以通过 req.signedCookies 访问,对于未签名的 cookie,您可以通过 req.cookies 访问。 要发送带有响应的 cookie,请使用类似 cookie

        app.use(cookieParser('12345'));
             res.cookie('username', 'john doe', { maxAge: 900000, httpOnly: true, signed: true, secret: '12345' });
            res.cookie('user_name', 'anik islam', { maxAge: 900000, httpOnly: true, signed: false, secret: '12345' });
        

        你可以访问像

        这样的 cookie
        console.log(req.cookies);
        console.log(req.signedCookies);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-28
          • 2019-06-28
          相关资源
          最近更新 更多