解析 Cookie
标头并将 req.cookies
填充为一个以 cookie 名称为键的对象。可以选择通过传递一个 secret
字符串来启用签名 cookie 支持,这将分配 req.secret
,以便其他中间件可以使用它。
$ npm install cookie-parser
var cookieParser = require('cookie-parser')
使用给定的 secret
和 options
创建一个新的 cookie 解析器中间件函数。
secret
用于签署 cookie 的字符串或数组。这是可选的,如果未指定,则不会解析已签署的 cookie。如果提供字符串,则将其用作密钥。如果提供数组,则将尝试使用每个密钥按顺序取消签署 cookie。options
传递给 cookie.parse
作为第二个选项的对象。有关更多信息,请参见 cookie。
decode
用于解码 cookie 值的函数中间件将解析请求上的 Cookie
标头,并将 cookie 数据作为属性 req.cookies
公开,如果提供了 secret
,则作为属性 req.signedCookies
公开。这些属性是 cookie 名称到 cookie 值的名称值对。
当提供 secret
时,此模块将取消签署并验证任何已签署的 cookie 值,并将这些名称值对从 req.cookies
移动到 req.signedCookies
。已签署的 cookie 是一个 cookie,其值以 s:
为前缀。签名验证失败的已签署 cookie 将具有值 false
,而不是篡改的值。
此外,此模块支持特殊的“JSON cookie”。这些是 cookie,其值以 j:
为前缀。当遇到这些值时,该值将作为 JSON.parse
的结果公开。如果解析失败,则原始值将保留。
将 cookie 值解析为 JSON cookie。如果它是 JSON cookie,这将返回解析后的 JSON 值,否则,它将返回传递的值。
给定一个对象,这将遍历键并对每个值调用 JSONCookie
,用解析后的值替换原始值。这将返回与传入相同的对象。
将 cookie 值解析为已签署的 cookie。如果它是已签署的 cookie 且签名有效,这将返回解析后的未签署值。如果该值未签署,则返回原始值。如果该值已签署但签名无法验证,则返回 false
。
secret
参数可以是数组或字符串。如果提供字符串,则将其用作密钥。如果提供数组,则将尝试使用每个密钥按顺序取消签署 cookie。
给定一个对象,这将遍历键并检查任何值是否为已签署的 cookie。如果它是已签署的 cookie 且签名有效,则该键将从对象中删除并添加到返回的新对象中。
secret
参数可以是数组或字符串。如果提供字符串,则将其用作密钥。如果提供数组,则将尝试使用每个密钥按顺序取消签署 cookie。
var express = require('express')
var cookieParser = require('cookie-parser')
var app = express()
app.use(cookieParser())
app.get('/', function (req, res) {
// Cookies that have not been signed
console.log('Cookies: ', req.cookies)
// Cookies that have been signed
console.log('Signed Cookies: ', req.signedCookies)
})
app.listen(8080)
// curl command that sends an HTTP request with two cookies
// curl http://127.0.0.1:8080 --cookie "Cho=Kim;Greet=Hello"