2012-12-16 18 views
5

Birisi, flask-security'ın parola sıfırlama jetonunda neler olduğunu anlatabilir mi?Flask Güvenlik'te simge tabanlı parola sıfırlama işlevinin açıklaması

https://github.com/mattupstate/flask-security/blob/develop/flask_security/recoverable.py

(diğer parçalar kadar bir dizin olabilir.)

Benim anlayış neyi oluyor: FORGOT_PASSWORD tarafından tanımlanan güzergah olarak

  1. (kod github burada) kullanıcı şifreyi sıfırlamak için bir form gönderir
  2. A "reset_password_token" üretilir. Bu kullanıcının ID'si (kullanıcının şifreli şifreli) şifresinden md5() mi?
  3. Jetonu içeren bir sıfırlama parola adresine bir bağlantı oluşturulur.
  4. Bu bağlantı, user.email tarafından verilen adrese gönderilmiştir.
  5. Kullanıcı bu bağlantıyı tıkladığında, reset_password (simge olarak tanımlanmış) bir rotaya gider. Jeton değeri, bu rota için bir argümandır.
  6. Yol, belirtecin geçerli olup olmadığını ve süresi dolup taşmadığını değerlendirir.
  7. Böyle bir durumda, bu yol yeni bir parola isteyen bir form oluşturur, ResetPasswordForm().

Bu doğru mu? Ayrıca

:

  1. yukarıdaki Eğer jetonu mevcut şifrenin yeni md5() içerirler yapmak güvenlidir, doğru mu? Tersine, benzersiz ve pahalı olması gerektiğini biliyorum, ama yine de?
  2. Son kullanma tarihi nerede saklanır?

Ben en çok spesifik olarak generate_password_reset fonksiyonu

data = [str(user.id), md5(user.password)] return _security.reset_serializer.dumps(data)

ve O belirteci seri hale getirmek itsdangerous modülünü kullanıyor reset_password_token_status(token)

cevap

4

get_token_status(token, 'reset', 'RESET_PASSWORD') fonksiyonu olarak anlamadım. Aşağıda bu konuda daha fazla okursanız son kullanma damgası vb nasıl kullanıldığına Cevaplarınızı olacak

http://packages.python.org/itsdangerous/

fonksiyon serializer.dumps() sürece istisnalar dönecektir get_token_status tarafından çağrılan benzersiz tefrika dize ve serializer.loads() yaratır tam serileştirilmiş değer, parametre olarak verilmiştir.

Yani dumps()10 ve sonra dönüş değerini kullanarak, loads(). Eşleşmiyorsa, bu durumda kötü belirteci anlamına gelen istisnaınız vardır.