用户可以在注销后查看受保护的页面

时间:2016-04-20 14:12:44

标签: python nginx flask gunicorn flask-login

一个主页,匿名用户可以登录。

登录后,他们可以访问受保护的内容(为匿名用户返回401)。

但是,当用户执行以下步骤时:

  1. 登录
  2. 访问受保护的页面
  3. 退出
  4. 返回受保护的页面(通过点击后退按钮或输入地址)
  5. 现在匿名的用户仍然可以看到受保护页面的内容,以及他事先登录的用户数据。

    有趣的是,这种行为在生产环境中发生(不在我的本地开发机器上)。在dev中,一切都正常,一旦用户退出,他就无法访问受保护的内容。这让我觉得它本身并不是一个应用程序问题,而是在nginxgunicorn的水平上。

    有什么想法吗?

    /application.py

    from flask.ext.login import logout_user, login_required
    
    # ...
    
    @app.route('/logout')
    def logout():
        if not current_user.is_anonymous:
            logout_user()
        return redirect(url_for('index'))
    
    @app.route('/me')
    @login_required
    def me():
        return render_template('me.html')
    

    /templates/me.html

    {{ current_user.name }}
    <a href="{{ url_for('logout') }}">Logout</a>
    

2 个答案:

答案 0 :(得分:0)

这应该完成工作,在登录期间创建会话cookie和响应对象,并根据会话cookie的存在识别用户,但是当用户注销时删除会话cookie。 这可能会有所帮助☺☺☺

https://pythonhosted.org/Flask-Session/

答案 1 :(得分:0)

正如我发布的另一个问题所解释,与同一主题相关:

nginx does not receive requests except for hard refresh

问题在于nginx缓存设置。

expires 0;中将nginx.conf添加到http { ... }就可以了。