2015-09-23 19 views
7

Tôi muốn sửa đổi is_active trong Flask-Login để người dùng không phải lúc nào cũng hoạt động.Flask-Login tăng TypeError: đối tượng 'bool' không thể gọi khi cố gắng ghi đè thuộc tính is_active

Giá trị mặc định luôn trả về True, nhưng tôi đã thay đổi nó để trả về giá trị của cột banned.

Dựa trên tài liệu, is_active phải là tài sản. Tuy nhiên, mã Flask-Login nội bộ tăng:

TypeError: 'bool' object is not callable 

Khi cố gắng sử dụng is_active.

Làm cách nào để sử dụng chính xác is_active để hủy kích hoạt một số người dùng?

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

@davidism, bây giờ, sau khi cập nhật, tôi có một vấn đề tốt hơn https://github.com/miguelgrinberg/flasky/issues/1#issuecomment-142647023 lol – anvd

+0

Tôi không chắc chắn ý của bạn là gì. Nếu một ứng dụng dự kiến ​​Flask-Login <0.3, sau đó cài đặt Flask-Login <0.3 và sử dụng nó một cách thích hợp, cho đến khi ứng dụng được cập nhật. Câu trả lời của tôi có trả lời câu hỏi ngay lập tức của bạn không? – davidism

+0

Lỗi đó về bảo vệ phiên mạnh mẽ đã được báo cáo cho Flask-Login. Nó không liên quan đến sự thay đổi thành 'is_active'. Nhưng không có câu trả lời cho "có một lỗi trong Flask-Đăng nhập" ngoại trừ "chờ cho đến khi nó cố định". – davidism

Trả lời

20

is_active, is_anonymousis_authenticated là tất cả các thuộc tính như Đăng nhập bằng Flask 0.3. Nếu bạn muốn sử dụng chúng, hãy coi chúng là thuộc tính, đừng gọi chúng. Nếu bạn muốn ghi đè chúng, hãy nhớ trang trí chúng với @property.

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

Dường như bạn đang đọc tài liệu cho phiên bản mới nhất (0.3), nhưng sử dụng phiên bản cũ hơn của thư viện. Phiên bản 0.3 contains a breaking change đã thay đổi các thuộc tính này từ các phương thức thành thuộc tính. Bạn nên nâng cấp lên phiên bản Flask-Login mới nhất và coi chúng là thuộc tính.

Bạn tắt người dùng bằng cách làm cho thuộc tính is_active của mình trả lại False. Ý tưởng của bạn để trả về giá trị của một cột là tốt.

0

Bạn quá tải is_active để thực hiện logic của riêng bạn.

Có vấn đề gì với nó? Không có gì IMO. Đúng là ngoại trừ việc bạn quên đặt thuộc tính bằng cách sử dụng @property trang trí

Ví dụ: Tornado tương tự như current_user chẳng hạn.

+0

ok, nhưng tôi có thể sử dụng def is_banned (self): hoặc bất cứ điều gì khác. về cơ bản đây là một tài sản hoàn toàn độc lập với flask_login, phải không? – anvd

+0

Có, nhưng is_active sẽ luôn đúng trong trường hợp đó. Đó là tất cả vào quyết định của bạn –

Các vấn đề liên quan