Какая точка метода is_authenticated используется в Flask-Login? - программирование
Подтвердить что ты не робот

Какая точка метода is_authenticated используется в Flask-Login?

Я работаю над Mask-Tutorial Flask прямо сейчас, и я нашел этот бит кода:

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    nickname = db.Column(db.String(64), unique = True)
    email = db.Column(db.String(120), unique = True)
    role = db.Column(db.SmallInteger, default = ROLE_USER)
    posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return unicode(self.id)

    def __repr__(self):
        return '<User %r>' % (self.nickname)

is_authenticated, is_active и is_anonymous кажется довольно странным для меня - когда они когда-нибудь вернут что-либо, кроме их предопределенного значения?

Может кто-нибудь объяснить мне, почему Flask-Login заставляет меня использовать эти, казалось бы, бесполезные методы?

4b9b3361

Ответ 1

Прежде всего, is_anonymous() и is_authenticated() являются взаимно противоположными. Вы можете определить его как отрицание другого, если хотите.

Вы можете использовать эти два метода, чтобы определить, зарегистрирован ли пользователь.

Когда никто не регистрируется в Flask-Login current_user, устанавливается объект AnonymousUser. Этот объект отвечает is_authenticated() и is_active() на False и is_anonymous() на True.

Метод is_active() имеет еще одно важное применение. Вместо того, чтобы всегда возвращать True, как я предложил в учебнике, вы можете заставить его возвращать False для запрещенных или дезактивированных пользователей, и этим пользователям не разрешается войти в систему.

Ответ 2

Я был озадачен этим is_authenticated vs is_anonymous в течение нескольких часов. Я не мог поверить, что они были просто противоположны. Наконец, случайно я обнаружил этот старый пост в блоге. Речь идет о проблеме в системе шаблонов Django, в которой несуществующие переменные оцениваются как False. Это может привести к неправильному поведению при тестировании is_anonymous в коде шаблона. Снова это старо, поэтому я не знаю, держится ли он. Способ решения проблемы заключался в создании is_authenticated.

Я думаю, Flask-Login просто скопировал модель из Django без допроса. Теперь я могу спать спокойно.