Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让Flask Login将用户名作为参数传递到模型中的load_用户回调中,而不是id?_Python_Flask_Flask Login - Fatal编程技术网

Python 如何让Flask Login将用户名作为参数传递到模型中的load_用户回调中,而不是id?

Python 如何让Flask Login将用户名作为参数传递到模型中的load_用户回调中,而不是id?,python,flask,flask-login,Python,Flask,Flask Login,我试图让我的应用程序从模型中的User和Admin类加载用户。在登录的视图中,它进入两个表,以检查用户是否存在,以及是否正确执行此操作。问题是,在is在其中一个表中找到用户后,它错误地从管理模型加载信息。这是因为load_用户回调: # Set up user_loader @login_manager.user_loader def load_user(user_id): return Admin.query.get(int(user_id)) or User.query.get(in

我试图让我的应用程序从模型中的User和Admin类加载用户。在登录的视图中,它进入两个表,以检查用户是否存在,以及是否正确执行此操作。问题是,在is在其中一个表中找到用户后,它错误地从管理模型加载信息。这是因为load_用户回调:

# Set up user_loader
@login_manager.user_loader
def load_user(user_id):
    return Admin.query.get(int(user_id)) or User.query.get(int(user_id))

正在接收匹配帐户对象的id作为参数。这带来了一个问题,因为id是主键,因此没有唯一性,因此两个用户将拥有相同的id,因为它们是以增量顺序实现的。因此,如果我使用id为1的用户登录,load user回调将查找id为1的用户,从Admin表开始,因为它是首先定义的用户。第一个管理员的id也为1,因此它从管理员模型而不是用户模型中获取该用户。如何更改load_用户回调以接收用户的用户名而不是id

在您的Flask登录用户类上有4种方法必需

is_authenticated-如果用户是 已验证,即他们提供了有效的凭据。(仅限 经过身份验证的用户将满足所需的登录条件。)

is_active-如果这是活动用户,则此属性应返回True- 除了经过身份验证之外,他们还激活了自己的 帐户,未被暂停,或您的申请有任何条件 拒绝一个帐户。非活动帐户可能无法登录(未登录) 当然是被迫的)

is_anonymous-如果 这是一个匿名用户。(实际用户应返回False。)

get_id()-此方法必须返回唯一标识 此用户,并可用于从用户加载程序加载用户 回拨。请注意,这必须是unicode-如果ID本机为 int或其他类型,则需要将其转换为unicode

只需让
get\u id
返回用户名而不是self.id。。。然后更改您的
load\u用户
以查找它

也许您可以使用替代令牌