繁体   English   中英

如何在 flask-login 中跟踪当前用户?

[英]How to track the current user in flask-login?

我正在尝试从 flask-login 中使用我视图中的当前用户。 所以我试着g object

我正在将flask.ext.login.current_user分配给 g object

@pot.before_request
def load_users():
   g.user = current_user.username

如果用户是正确的,它就可以工作。 但是当我使用错误的凭据注册或登录时,我收到此错误

AttributeError: 'AnonymousUserMixin' object has no attribute 'username'

请指教我哪里错了...

感谢您的答案@Joe和@pjnola,因为大家都建议我提到flask-login docs

我发现我们可以自定义匿名用户类,所以我根据我的要求进行了自定义,

Anonymous class

#!/usr/bin/python
#flask-login anonymous user class
from flask.ext.login import AnonymousUserMixin
class Anonymous(AnonymousUserMixin):
  def __init__(self):
    self.username = 'Guest'

然后将此类添加到anonymous_user

login_manager.anonymous_user = Anonymous

从这里它可以获取用户名,如果它是匿名请求。

好吧,错误信息说明了一切。 没有登录用户,因此current_user返回AnonymousUserMixin AnonymousUserMixin实现了此处描述的接口: http//flask-login.readthedocs.org/en/latest/#your-user-class (不包含username属性)。 尝试这样的事情:

@pot.before_request
def load_users():
    if current_user.is_authenticated():
        g.user = current_user.get_id() # return username in get_id()
    else:
        g.user = None # or 'some fake value', whatever

显然,你的其余代码必须处理g.user不会引用真实用户的可能性。

AnonymousUserMixin没有用户名属性。 您需要覆盖该对象并调用mixin。 看一下LoginManager.anonymous_user这是一个在没有用户登录时使用的对象。

您还需要从某个地方获取用户。 将用户名存储在g是没有意义的,因为您可以使用current_user.username。

如果你想获得用户名,你也需要

if current_user.is_authenticated():
    g.user = current_user.username

这将要求用户对象具有名为username的属性。 有很多方法可以自定义Flask-Logins的使用方法

我建议重新阅读文档并查看源代码:

https://github.com/maxcountryman/flask-login/blob/master/flask_login.py

为了查找是否有登录 session,我们可以执行以下操作:(我已经完成了所有解决方案并注意到当我使用以下语句时它失败了。)

if current_user.is_authenticated():
    g.user = current_user.username

正确的做法是:

if current_user.is_authenticated:
    g.user = current_user.username

然后它工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM