2013-05-10 28 views
6

cookieParser() bize kurcalamayı önlemek için harika bir sır cümle, kurabiye imzalama seçeneği sunar. Kurcalamayı önlemek için bir çerezin özel bir değerle imzalandığını anlıyorum. CookieParser() ve cookieSession() birlikte mi kullanıyorsunuz?

Sadece sunucu depolanan çerezler (Ben sadece hiç büyümediği, { loggedIn = true, userId=763487246824632} saklamak) için harika alternatif olarak görüyorum cookieSession(), keşfetti.

Ama ... cookieParser() için bir "gizli" ayarlamanın bir şeyi bozduğunu buldum ve cookieSession(), gizli tümce ile eşleşiyorsa, çalışmayı durdurdu. nedeni çerez aynı sırrı kullanarak imzalanmış ise, o zaman cookieParser() aslında onu alır ve onu ayrıştırma gibi görünüyor.

{ cookie: 
    { path: '/', 
    _expires: null, 
    originalMaxAge: null, 
    httpOnly: true } } 

yerine:

{ testing: 'OOO' } 

(Her yeniden ekler garip bir şey cookieParser() gizli aynı imzayla çalışmalarını ve çıkarmış kez, oturum için ayarlanmış olmasıdır bir 'o') So ...

  • benim analizi doğru aldınız mı? Gizli cümleler maç eğer oturumu garip { cookie nesneye ayarlanır neden
  • biliyor musunuz?

Merc.

cevap

10

Sizin analiz doğruysa, bunu üretebilir.

konu cookieSession ortakatmanlarına this line kaynaklanır (bazı bağlam: options.secretcookieSession geçirilen anahtardır, req.secretcookieParser geçirilen anahtardır): Her ikisine de Middleware gizli bir anahtar geçirirseniz, cookieSession bulmak varsayar req.cookies'da ham (ayrılmamış) çerez.

Ama cookieParser (ve cookieSession önce çalıştırılıyor) yanı imzalı çerezi beri, bu çerez kendisi (ve imzalama anahtarları aynıydı, çünkü bunu yapmak için başarmıştır) ayrıştırılır bunu depoladığı req.signedCookiesve req.cookies onu silindi. cookieSession ile ilgili olarak, çerez henüz ayarlanmamıştır. Çözüm için olduğu gibi

app.use(express.cookieSession({ 
    cookie : { // <-- this object 
    ... 
    } 
}); 

: Her katman için farklı bir anahtar kullanmak, ya da sadece bir tane geçmesi ya

Gördüğünüz nesne (cookieSession yapılandırmasından cookie mülkiyet olan) varsayılan oturum içeriği olan Bunların dışında gizli anahtarınız var, ama ikisini de değil (eğer cookieParser, numaralı telefona ilettiğinizde çerezleriniz imzalı olacaktır).

FWIW: Bunun gerçek bir hata olup olmadığından emin değilim. Bu, cookieParser ve cookieSession için aynı imzalama mekanizmasının kullanılmasının bir sonucu olup, bir veya diğeri tarafından imzalanmış çerezler arasında hiçbir ayrım yoktur.Çerezin req.signedCookies'da olup olmadığını her zaman kontrol ederek düzeltilebilir.

+1

Ne harika, kapsamlı bir cevap. Biliyorum çok güzel bir konu, ama + 1s hak ediyor - teşekkür ederim! – Merc

İlgili konular