2017-06-22 4 views
0

Zu Testzwecken muss ich ein signiertes Cookie mit HTTP-Anfrage bereitstellen. So kann mein Express-App-Server es als ein signiertes Cookie betrachten und es in req.signedCookies Objekt setzen.Wie signiere ich einen Cookie manuell mit CookieParser?

Allerdings kann ich keine geeignete Methode in docs finden.

Ich möchte folgendes tun:

let signed = cookieParser.signYourCookie({ cookieName: 'cookieValue' }, secretString); 
// => cookieName=cookieValue.9PuJzypXeGq3tc2fFvlukjgNZ518jk 

, dass eine Operation gegenüber cookieParser.signedCookie(str, secret)method ist. ExpressJS macht es automatisch unter der Haube, aber es gibt ein Bedürfnis, ein Plätzchen manuell manchmal zu unterzeichnen und die Methode scheint zu fehlen.

Um zu erklären, warum ich das brauche. Ich benutze Chai-http und muss einen Cookie mit der Anfrage setzen. Und ich brauche es ein signiertes Cookie zu sein, so dass mein Server es finden konnte req.signedCookies Objekt:

chai.request('http://foo.com') 
    .get('/url/path') 
    .set('my-signed-cookie', 'value-of-my-signed-cookie') 

Antwort

2

Das Plugin verfügt nicht über öffentliche Methoden dafür. Was eigentlich seltsam ist. Also habe ich das Stück aus dem Code des Plugins gezogen.

Sie in Ihrer App:

var crypto = require('crypto'); 

function sign(val, secret){ 
    return val + '.' + crypto 
    .createHmac('sha256', secret) 
    .update(val) 
    .digest('base64') 
    .replace(/\=+$/, ''); 
}; 


// pay attention to `s:` prefix. With that, plugin considers it as a signed cookie, apparently 
.set('cookie', 'my-signed-cookie=s:value-of-my-signed-cookie.sdfblwe85t72yhofiuqhwo481') 
Verwandte Themen