错误:签名的cookie需要cookieParser(“ secret”)

时间:2018-11-11 12:04:31

标签: node.js express cookies

我正在研究express / node.js并试图了解expressjs的cookie,并且正在这样设置cookie:

var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
app.use(cookieParser());

app.get('/', function(req, res){
    res.cookie('cookie1', 'This is my first cooke', {maxAge: 1000*60*60*24*7, httpOnly: true});
    res.end('Cookie has been set');
});

并按以下方式访问Cookie:

app.get('/readCookies',function(req, res){
    res.send(req.cookies.cookie1);
});

但是问题是signed: true选项,当在设置cookie的过程中包括此用于编码cookie值的选项时,出现以下错误:

Error: cookieParser("secret") required for signed cookies

请帮助我,谢谢!

2 个答案:

答案 0 :(得分:3)

该错误说明了要发送已签名的Cookie所需执行的操作:

  

错误:签名的cookie需要cookieParser(“ secret”)

Express documentation指出:

  

使用cookie-parser中间件时,此方法还支持签名的cookie。只需将设置为signed的{​​{1}}选项包括在内即可。然后true将使用传递给res.cookie()的密钥对值进行签名。

cookie-parser文档指出:

  

cookieParser(秘密,选项)

     
      
  • cookieParser(secret)用于签名cookie的字符串或数组。这是可选的,如果未指定,将不会解析签名的cookie。如果提供了字符串,则将其用作密码。
  •   

所以一切结合在一起:

  • 安装secret中间件:

    cookie-parser
  • 将其添加到Express应用中:

    npm install cookie-parser
    
  • 使其成为Cookie:

    const cookieParser = require('cookie-parser');
    
    ...
    app.use(cookieParser('MY SECRET'));
    
  • ,然后读回cookie值:

    res.cookie('cookie1', 'This is my first cookie', { signed : true });
    

答案 1 :(得分:1)

如果设置了signed:true选项,则必须将密钥作为字符串设置为cookieParser()的参数,如下所示:

var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
//Set secret key
app.use(cookieParser('your random secret string here'));

//Set/Write Cookies
app.get('/',function(req, res){
    res.cookie('cookie1', 'This is my first cookie', {signed:true, maxAge: 1000*60*60*24*7, httpOnly: true});
    res.end('Cookie has been set');
});

否则,将其保留为空白,如下所示:

app.use(cookieParser());

要访问签名的cookie值,可以尝试以下操作:

//Read Cookies
app.get('/readCookies',function(req, res){
    res.send(req.signedCookies['cookie1']);
    //OR, req.signedCookies.cookie1
});

或者,如果您未设置httpOnly: true选项,则可以按照以下步骤从浏览器控制台检查cookie:

document.cookie

要销毁Cookie,请尝试以下操作:

//Remove Cookies
app.get('/removeCookies',function(req, res){
    res.clearCookie('cookie1');
    res.send("Cookie has been cleared");
});

有关更多详细信息,请检查res.cookie(name, value [, options])