Flask 消息闪烁跨重定向失败

Posted

技术标签:

【中文标题】Flask 消息闪烁跨重定向失败【英文标题】:Flask message flashing fails across redirects 【发布时间】:2011-09-05 23:57:38 【问题描述】:

我目前正在使用Flask 和Google App Engine 开展一个项目。当我闪现一条消息然后使用redirect()时,调用get_flashed_messages()返回空:

@views.route('/todo/add', methods=["POST"])
def add_todo():
    flash('hey')
    return redirect(url_for('todo_list')) 

但是,如果我注释掉

# SERVER_NAME = 'localhost'

然后它似乎工作正常。我的问题是我必须使用子域,所以我需要设置 SERVER_NAME。

什么是交易?

【问题讨论】:

【参考方案1】:

我明白了! 诀窍是将服务器名称设置为带有点的名称。

所以 'localhost' 变成了 'app.local' 并且 app.local 应该添加到 /etc/hosts 中,指向与 localhost 相同的地址。

来自docs:

请记住,不仅 Flask有不知道的问题 子域是什么,您的网络浏览器 也一样。大多数现代网络浏览器 不允许跨子域 cookie 在服务器名称上设置 点在里面。因此,如果您的服务器名称是 'localhost' 你将无法 为 'localhost' 和每一个设置一个 cookie 它的子域。请选择一个 在这种情况下,不同的服务器名称, 像'myapplication.local'并添加 这个名字+你想要的子域 用于您的主机配置或设置 本地绑定。

【讨论】:

我发现只要注释掉 SERVER_NAME 就可以了。我以前有SERVER_NAME = 127.0.0.1:5000 旁注,我需要在我的环境中将 .dev 更改为 .local。【参考方案2】:

您是否设置了 cookie 以跨所有子域工作?

默认情况下,它们仅在设置它们的域上可读

【讨论】:

感谢您的回复。知道怎么做吗?我看到你可以调用 set_cookie() 但我真的不知道我会在哪里这样做......flask.pocoo.org/docs/api/#response-objects

以上是关于Flask 消息闪烁跨重定向失败的主要内容,如果未能解决你的问题,请参考以下文章

Spring之跨重定向请求传递数据

Spring 跨重定向请求传递数据

Spring之跨重定向请求传递数据

Spring 梳理-跨重定向请求传递数据-Flash

Facebook 登录消息:“URL 被阻止:此重定向失败,因为重定向 URI 未在应用程序的客户端 OAuth 设置中列入白名单。”

Facebook 登录消息:“URL 被阻止:此重定向失败,因为重定向 URI 未在应用程序的客户端 OAuth 设置中列入白名单。”