Flask-Login未经授权的端点重定向到错误的页面

时间:2019-01-25 14:10:23

标签: python flask flask-login

我正在使用Flask-Login使用@roles_required装饰器来管理对路由的访问。当我尝试访问我无权访问的路由时,我被重定向到应用程序的主页example.com,并且没有闪烁任何适当的消息。但是,如果我注销,则重定向到的登录页面将显示所有闪烁的消息,告诉我我无权访问我尝试访问的路由。如果我尝试访问6个页面,将有6条消息在等待我。

我已将配置文件更新为:

USER_AFTER_REGISTER_ENDPOINT    = 'confirm_email'
USER_UNCONFIRMED_EMAIL_ENDPOINT = 'confirm_email'
USER_UNAUTHENTICATED_ENDPOINT   = 'user.login'
USER_UNAUTHORIZED_ENDPOINT      = 'user.login'
USER_AFTER_CONFIRM_ENDPOINT     = 'onboarding'

除了我的USER_UNAUTHORIZED_ENDPOINT外,所有这些端点的行为均符合预期。

我的目的是将@role_required个故障与@login_required个故障一样对待,并且我认为仅解决此重定向问题就可以解决我的消息闪烁问题。

我目前正在使用Flask v1.0.2,Flask-User v0.7,Flask-Login v0.4.1。

1 个答案:

答案 0 :(得分:0)

原来的问题是,我已经登录了。当用户尝试访问他们缺乏权限的路由时,他们首先被发送到登录处理程序,但是已经登录,他们是重定向到应用程序主目录,而无需单击登录页面并触发闪烁的消息。

为解决此问题,我对应用程序进行了重组,以将登录信息以及未经授权的访问尝试发送至应用程序仪表板,并在该页面上刷新登录成功和Role_required失败。

在此适当的解决方案之前,我已经辞职了,并简单地添加:

{% block home_flash %}
    {%- with messages = get_flashed_messages(with_categories=true) -%}
        {% if messages %}
            {% for category, message in messages %}
                {% if category=='error' %}
                    {% set category='danger' %}
                {% endif %}
                <div class="alert alert-{{category}}">{{ message|safe }}</div>
            {% endfor %}
        {% endif %}
    {%- endwith %}
{% endblock %}

到我的主页,因此至少闪烁的消息正在显示并且没有备份。