Ошибка: cookieParser («секретный») требуется для подписанных файлов cookie - PullRequest
0 голосов
/ 11 ноября 2018

Я работаю над express / node.js и пытаюсь понять cookie-файлы expressjs, и я устанавливаю 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 голосов
/ 11 ноября 2018

Если вы установите опцию 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
});

Или вы можете проверить файлы cookie из консоли браузера следующим образом, если вы не установили опцию httpOnly: true:

document.cookie

Для уничтожения куки попробуйте следующее:

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

Для более подробной информации, пожалуйста, проверьте res.cookie (имя, значение [, опции])

0 голосов
/ 11 ноября 2018

Ошибка объясняет, что вам нужно сделать, чтобы иметь возможность отправлять подписанные куки:

Ошибка: cookieParser ("секретный") требуется для подписанных файлов cookie

Документация Express гласит:

При использовании промежуточного программного обеспечения cookie-parser этот метод также поддерживает подписанные файлы cookie. Просто включите параметр signed, установленный в true. Затем res.cookie() будет использовать секрет, переданный cookieParser(secret), чтобы подписать значение.

Документация cookie-parser гласит:

cookieParser (секрет, опции) :

  • secret строка или массив, используемый для подписи файлов cookie. Это необязательно и, если не указано, не будет анализировать подписанные куки. Если указана строка, она используется в качестве секрета.

Итак, все вместе:

  • установка cookie-parser промежуточное ПО:

    npm install cookie-parser
    
  • добавить его в приложение Express:

    const cookieParser = require('cookie-parser');
    
    ...
    app.use(cookieParser('MY SECRET'));
    
  • заставь это подписать куки:

    res.cookie('cookie1', 'This is my first cookie', { signed : true });
    
  • и прочитайте обратно значение cookie:

    res.send(req.signedCookies.cookie1);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...