2015-09-23 9 views
7

मैं फ्लास्क-लॉगिन में is_active संशोधित करना चाहता हूं ताकि उपयोगकर्ता हमेशा सक्रिय न हों।फ्लास्क-लॉगिन टाइप टाइपर: 'बूल' ऑब्जेक्ट को निष्क्रिय करने की कोशिश करते समय कॉल करने योग्य नहीं है is_active property

डिफ़ॉल्ट हमेशा True देता है, लेकिन मैंने इसे banned कॉलम के मान को वापस करने के लिए बदल दिया।

दस्तावेज़ों के आधार पर, is_active एक संपत्ति होना चाहिए। हालांकि, आंतरिक कुप्पी के लॉग इन कोड को जन्म देती है:

TypeError: 'bool' object is not callable 

जब is_active उपयोग करने के लिए कोशिश कर रहा।

कुछ उपयोगकर्ताओं को निष्क्रिय करने के लिए मैं is_active का सही तरीके से उपयोग कैसे करूं?

class User(UserMixin, db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    banned = db.Column(db.Boolean, default=False) 

    @property 
    def is_active(self): 
     return self.banned 

login_user(user, form.remember_me.data) 

if not force and not user.is_active(): 
TypeError: 'bool' object is not callable 
+0

@ डेविडिज्म, अब अद्यतन के बाद, मुझे एक बेहतर समस्या है https://github.com/miguelgrinberg/flasky/issues/1#issuecomment-142647023 lol – anvd

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है। यदि कोई ऐप फ्लास्क-लॉगिन <0.3 की अपेक्षा करता है, तो फ्लास्क-लॉगिन <0.3 इंस्टॉल करें और ऐप अपडेट होने तक इसे उचित रूप से उपयोग करें। क्या मेरा जवाब आपके तत्काल प्रश्न का उत्तर देता है? – davidism

+0

मजबूत सत्र सुरक्षा के बारे में उस बग को पहले से ही फ्लास्क-लॉगिन पर रिपोर्ट कर दी गई है। यह 'is_active' में परिवर्तन से संबंधित नहीं है। लेकिन "फ्लास्क-लॉग इन में एक बग है" को छोड़कर "इसका इंतजार होने तक प्रतीक्षा करें" का कोई जवाब नहीं है। – davidism

उत्तर

20

is_active, is_anonymous, और is_authenticated Flask-Login 0.3 के सभी गुण हैं। यदि आप उनका उपयोग करना चाहते हैं, तो उन्हें विशेषताओं के रूप में देखें, उन्हें कॉल न करें। यदि आप उन्हें ओवरराइड करना चाहते हैं, तो उन्हें @property के साथ सजाने के लिए याद रखें।

# change from 
current_user.is_authenticated() 
# to 
current_user.is_authenticated 

ऐसा प्रतीत होता है कि आप सबसे हाल के संस्करण (0.3) के लिये दस्तावेज पढ़ रहे हैं, लेकिन पुस्तकालय के एक पुराने संस्करण का उपयोग कर। संस्करण 0.3 contains a breaking change जो इन विशेषताओं को विधियों से गुणों में बदल दिया। आपको फ्लास्क-लॉगिन के नवीनतम संस्करण में अपग्रेड करना चाहिए और उन्हें गुणों के रूप में व्यवहार करना चाहिए।

आप is_active संपत्ति False वापस करने के लिए उपयोगकर्ता को निष्क्रिय कर देते हैं। कॉलम के मान को वापस करने का आपका विचार ठीक है।

0

आप अपनी खुद की तर्क लागू करने के लिए is_active ओवरलोड।

इसके साथ क्या गलत है? कुछ भी नहीं आईएमओ। यह सही है कि आप इसे @property सजावट

टॉरनाडो में उदाहरण के लिए current_user के समान एक संपत्ति बनाने के लिए भूल गए हैं।

+0

ठीक है, लेकिन मैं def is_banned (स्वयं) का उपयोग कर सकता हूं: या कुछ और। मूल रूप से यह एक संपत्ति पूरी तरह से flask_login से स्वतंत्र है, है ना? – anvd

+0

हां, लेकिन उस मामले में is_active हमेशा सच रहेगा। यह आपके निर्णय पर निर्भर है –

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