使用UserMixin的烧瓶登录 - 尽管已实现,但没有"id"属性错误



我一直在尝试在我的烧瓶应用程序中使用烧瓶登录进行身份验证。在尝试实现这样的user_loader时:

@login_manager.user_loader
def load_user(id):
return User.get_id(id)

我收到错误

未实现错误:无id属性 - 覆盖get_id

我的用户类定义如下:

class User(Base, UserMixin):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
email = Column(String(70), unique=True)
userName = Column(String(40), unique=True)
password = Column(String(150))
#def get_id(self):
#    return (self.id)

我尝试重写 get_id 方法,如您在 User 类中看到的那样。它只是给了我错误

属性

错误:"str"对象没有属性"id">

我错过了什么?为什么找不到 id 属性?

您在覆盖中正确地实现了id变量的 getter,但我认为您误解了如何使用代码中的函数通过 id 加载用户。在被覆盖的函数中,get_id除了self之外不带任何参数,因为该函数只返回用户的 id。但是,您尝试将其用作从其 id 加载用户的函数。我们得到这个特定错误的原因是,通过调用User.get_id(id),你用self=id调用get_id,并且由于id是一个str,我们从尝试获取不存在的idid属性中获得AttributeError

尝试使用get而不是get_id(如本教程所示)。 这样,返回值就是具有所需idUser实例

@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))

最新更新