Jinja将所有Flask-Login用户视为未经过身份验证

时间:2016-11-24 15:07:04

标签: python flask jinja2 flask-login

我正在向模板发送用户列表,并希望显示已登录的用户。但是,当我遍历它们并检查is_authenticated时,它总是错误的。以下代码不显示用户名,但我希望它显示当前用户的名称。

{% for user in users %}
    {% if user.is_authenticated %}
        {{ user.username }}
    {% else %}
        - 
    {% endif %}
{% endfor %}

我尝试使用current_user,但只显示当前用户,而不是所有用户列表。

1 个答案:

答案 0 :(得分:1)

is_authenticated对所有用户都适用,即使他们没有登录。只有匿名用户未经过身份验证。如果您只想显示登录用户,请使用current_user。如果要在列表中标记登录用户,请在迭代时将每个用户与current_user进行比较。

<ul>{% for user in users %}
    <li>{{ user.username }}{% if user.username == current_user.username %} (current){% endif %}</li>
{% endfor %}</ul>

如果您继承is_authenticated(或者您自己定义),您的用户类将只有UserMixin属性。 Jinja将未知变量解释为false,因此如果你不是子类,那么Jinja总是认为is_authenticated是假的,因为它不存在。

from flask_login import UserMixin

class User(db.Model, UserMixin):
    ...

了解登录用户的完整列表是一个更大的问题。该请求仅知道当前用户,因为登录是在每个用户的浏览器上使用cookie处理的。您的应用程序需要设置其他方式来跟踪谁登录。例如,您可以存储每个用户登录模型的时间,然后考虑他们是否在一天内登录。