2016-01-07 18 views
6

Raylarda 4.x secret_key_base, oturum çerezini ve ayrıca cookies.signed numaralı telefonu arayarak oluşturulan diğer imzalı çerezleri imzalamak için kullanılır.Rails, daha önceden imzalanmış veriler kaybetmeden secret_key_base güncellenebilir mi?

Bu secret_key_base numaralı telefonu güncellemeyi/döngüsünü/yuvarlamayı, ancak daha önce imzalı çerezlerin tümüne erişimi kaybetmeden (oturumları kaybetmeme gerek yok). Bunu yapmak mümkün mü?

  1. secret_key_base Yeni ekle:

    İdeal gibi bir şey istiyorum.

  2. Birbirinden eski ve yeni secret_key_base'ları birlikte kullanın, böylece eski anahtar kullanılarak imzalanmış çerezler daha yeni anahtarla yeniden imzalanabilir.
  3. Eski secret_key_base'u kaldırın.

Ben secret_key_base bir secret_token kullanarak yükseltme için benzer işlevsellik olduğunu biliyorum. Rails kullanarak bunu başarmanın bir yolu var mı?

cevap

0

Bunu farklı şekilde ele alabilirsiniz. Şimdilik eski secret_key'i saklayın ve belirli bir kullanıcıya eşlenen tüm çerez verilerini saklayabileceğiniz geçici bir tablo oluşturun. Bunun için redis kullanabilir. Mevcut tüm çerez verilerinin alındığından emin olduğunuzda, secret_key'i değiştirebilirsiniz. Bu, tüm çerez verilerini geçersiz kılmalıdır. Şimdi, çerezler alındığında, önce kullanıcı için verilerin mevcut olup olmadığını kontrol edebilir ve çerezi buna göre ayarlayabilir ve girişi geçici tablo/key_store'dan kaldırabilirsiniz. Geçici tablo boş sonra, Öncelikle eski secret_key_base ile çerezleri okumak için denemek için çerezler katman içinde encrypted ve signed gibi yöntemlerden bazıları üzerine yazarak bunu başarabilirsiniz tamamen

+0

Hangi kullanıcı olduğunu nasıl bilebilirim? Ziyaretçinin giriş yaptığını düşünemiyorum. Her ziyaretçi için benzersiz bir tanımlayıcı oluşturmuş olsak bile, onu ya imzasız bir çerezde saklamak zorunda kalacağız (başka birinin çerez bilgisini almayı gereksiz kılar) veya Başka bir imzalı çerez (başladığımız yere geri). – Felix

2

mekanizmasını kaldırabilirsiniz. Eğer başarılı olursa, bunları yenisine yükseltebilirsiniz. Sonunda tüm eski çerezler yeni sürümlere yükseltilecek ve ardından özel yamalarınızı kaldırabilirsiniz. mesajı doğrulayıcı burada nasıl çalıştığını da ödeme

https://github.com/rails/rails/blob/8350925bec434168f56b4fae22b5298cb4a83c41/actionpack/lib/action_dispatch/middleware/cookies.rb

bir göz atın. yardımcı olur

https://github.com/rails/rails/blob/8350925bec434168f56b4fae22b5298cb4a83c41/actionpack/lib/action_dispatch/middleware/cookies.rb#L251

Umut.

İlgili konular