我正在研究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
请帮助我,谢谢!
答案 0 :(得分:3)
该错误说明了要发送已签名的Cookie所需执行的操作:
错误:签名的cookie需要cookieParser(“ secret”)
使用
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])