Flask-Login raises TypeError: 'bool' object is not callable when trying to override is_active property

Flask-Login raises TypeError: 'bool' object is not callable when trying to override is_active property

我想在 Flask-Login 中修改 is_active,这样用户就不会一直处于活动状态。

默认总是returns True,但我把它改为return banned列的值。

根据文档,is_active 应该是 属性。但是,内部 Flask-Login 代码引发:

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

您重载 is_active 以实现您自己的逻辑。

有什么问题吗?没有海事组织。它是正确的,除了你忘记使用 @property 装饰器

使它成为 属性

例如,在 Tornado 中它类似于 current_user

is_activeis_anonymousis_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 将这些属性从方法更改为属性。您应该升级到最新版本的 Flask-Login 并将它们视为属性。

您通过使用户的 is_active 属性 变为 return False 来停用用户。您对 return 列值的想法很好。