如果用户是匿名的,请获取current_user [' id']

时间:2015-08-10 09:51:48

标签: python flask flask-login

我尝试使用current_user['id']获取当前用户ID。我得到TypeError: 'AnonymousUser' object has not attribute __getitem__,即使我在模板中使用current_user.is_authenticated()并在用户未经过身份验证时显示消息。关于其他方法,当我不使用current_user['id']时,如果用户未经过身份验证,我会收到正确的消息。为什么我会收到此错误?

def patients(self):
    get_doctor_id = str(current_user['id']); 

2 个答案:

答案 0 :(得分:2)

User(和AnonymousUser)对象不可订阅,您不能使用[]表示法访问其属性。只需直接访问idcurrent_user.id即可。 Flask-Login的UserMixin也提供get_id方法:current_user.get_id(),默认情况下会为经过身份验证的用户返回id,或为匿名用户返回None

确保正确设置用户类。

from flask_login import UserMixin, AnonymousUserMixin, LoginManager

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

class AnonymousUser(AnonymousUserMixin):
    id = None  # add an id attribute to the default AnonymousUser

login_manager = LoginManager(app)
login_manager.anonymous_user = AnonymousUser

答案 1 :(得分:-1)

如果您想在current_used是匿名时引发自定义错误消息,您可能希望使用try: except:分支,如此

def patients(self):
    try:
        get_doctor_id = str(current_user['id'])
    except TypeError:
        return flask.redirect("http://www.example.com/your/error/page/here", code=302)