我尝试使用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']);
答案 0 :(得分:2)
User
(和AnonymousUser
)对象不可订阅,您不能使用[]
表示法访问其属性。只需直接访问id
:current_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)