2012-12-16 24 views
5

में टोकन-आधारित पासवर्ड-रीसेट कार्यक्षमता का स्पष्टीकरण क्या कोई मुझे फ्लास्क-सुरक्षा के पासवर्ड रीसेट टोकन में क्या हो रहा है के माध्यम से चल सकता है?फ्लास्क-सुरक्षा

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

(वहाँ अन्य भागों तक एक निर्देशिका हो सकता है।)

की मेरी समझ क्या हो रहा है:

  1. मार्ग forgot_password द्वारा परिभाषित में (कोड GitHub पर यहाँ है) उपयोगकर्ता पासवर्ड रीसेट करने के लिए एक फॉर्म सबमिट करता है
  2. एक "reset_password_token" उत्पन्न होता है। इसमें उपयोगकर्ता के आईडी + उपयोगकर्ता के वर्तमान (संग्रहीत-एन्क्रिप्टेड) ​​पासवर्ड का md5() शामिल है?
  3. टोकन युक्त रीसेट पासवर्ड पते पर एक लिंक उत्पन्न होता है।
  4. यह लिंक user.email
  5. द्वारा दिए गए पते पर ईमेल किया गया है जब उपयोगकर्ता उस लिंक पर क्लिक करता है, तो वे रूट (दृश्यों में परिभाषित) पर जाते हैं, जो reset_password (टोकन) है। टोकन मान इस मार्ग के लिए एक तर्क है।
  6. मार्ग मूल्यांकन करता है कि टोकन मान्य है या नहीं समाप्त हो गया है।
  7. यदि ऐसा है, तो यह मार्ग एक नया पासवर्ड, ResetPasswordForm() के लिए एक फ़ॉर्म प्रस्तुत करता है।

क्या यह सही है?

इसके अलावा:

  1. यदि उपरोक्त सही है, यह टोकन वर्तमान पासवर्ड की एक नई md5() होते हैं बनाने के लिए सुरक्षित है? मुझे पता है कि यह उल्टा करने के लिए अद्वितीय और महंगा होना चाहिए, लेकिन फिर भी?
  2. समाप्ति तिथि कहां संग्रहीत की जाती है?

मैं सबसे विशेष रूप से generate_password_reset समारोह

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

और अंदर reset_password_token_status(token)

उत्तर

4

यह टोकन क्रमानुसार करने itsdangerous मॉड्यूल उपयोग कर रहा है

get_token_status(token, 'reset', 'RESET_PASSWORD') समारोह से उलझन में हूँ। आप नीचे दिए गए इसके बारे में अधिक पढ़ सकते हैं, तो आप कैसे समाप्ति टाइमस्टैम्प प्रयोग किया जाता है आदि पर अपने जवाब होगा

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

समारोह serializer.dumps() एक अद्वितीय धारावाहिक स्ट्रिंग और serializer.loads() जो get_token_status से पुकारा जाता है, जब तक कि अपवाद वापस आ जाएगी बनाता है सटीक धारावाहिक मूल्य इसे पैरामीटर के रूप में प्रदान किया जाता है।

तो आप dumps() और फिर उस से वापसी मूल्य का उपयोग करके, आप loads() पर कॉल करते हैं। यदि मेल नहीं खाता है, तो आपके पास अपवाद है जो इस मामले में खराब टोकन का मतलब है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^