我有两个Dash(开放源码)的应用程序是用Python语言编写的.在这两个应用程序中,我都使用Flask-Login 来处理常见的身份验证任务,比如登录、注销以及通过签名的Cookie记住用户的会话.换句话说,每个应用程序都有自己的登录页面,如果成功登录,该页面会将用户重定向到应用程序的主页.相反,每当用户决定注销时,用户都会被重定向到登录页面.

我期望已经成功登录到应用程序1(app1)的用户将不需要再次登录到应用程序2(app2),因为活动用户的ID被存储在Flask 会话中(提供了跨应用程序的公共密钥).事实上,当在本地部署时,它的工作效果与预期一致:

dash_app1.py个个

if __name__ == "__main__":
    app1.run(host="172.xx.xxx.x", port=8050, debug=True)

dash_app2.py个个

if __name__ == "__main__":
    app2.run(host="172.xx.xxx.x", port=8051, debug=True)

然而,当我将我的两个应用程序部署到运行在同一个Google App Engine(标准环境)上的两个服务上时,我无法重现这一点,即我需要分别登录app1app2,这是不受欢迎的.

由于app1部署在https://PROJECT_ID.REGION_ID.r.appspot.com上(默认服务),app2部署在https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com上(第二个服务),我本以为按如下方式配置FlaskTM应用程序会起作用(按照documentation):

dash_app1.py个个

app1 = dash.Dash(...)
server = app1.server
server.config.update(
    SECRET_KEY=SECRET_KEY, 
    SESSION_COOKIE_DOMAIN=".r.appspot.com"
)

dash_app2.py个个

# Same as above but for app2.

但是,包含活动用户的Cookie不会在Web浏览器上保留.

我也try 过修改其他的Flask 配置值,但都没有解决我的问题.

如有任何帮助,将不胜感激!

推荐答案

显然,根据这post,不可能使用.appspot.com作为部分域Cookie,重新引用:

这是因为apppot.com被添加到现代浏览器不应该允许为其设置Cookie的域名的公共后缀列表中:参见here

我猜它已经扩展到.r.appspot.com.<REGION_ID>.r.appspot.com,因为try 将SESSION_COOKIE_DOMAIN更改为这些值并没有解决问题.

此外,我认为这与网络浏览器没有关联,因为 firefox 和谷歌Chrome都拒绝使用Cookie.

然而,在这post中提出了一个解决方案,但它在生产环境中似乎并不健壮.

最后,Google App Engine允许您通过自定义域为您的应用程序提供服务,因此我建议使用此方法,以便在应用程序之间共享登录Cookie.

Python相关问答推荐

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

在应用循环中间保存pandas DataFrame

有条件地采样我的大型DF的最有效方法

通过优化空间在Python中的饼图中添加标签

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

_repr_html_实现自定义__getattr_时未显示

numpy卷积与有效

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

如何从pandas的rame类继承并使用filepath实例化

UNIQUE约束失败:customuser. username

lityter不让我输入左边的方括号,'

在Python中计算连续天数

重置PD帧中的值

为什么'if x is None:pass'比'x is None'单独使用更快?

交替字符串位置的正则表达式

计算机找不到已安装的库'

提取最内层嵌套链接

如何使用加速广播主进程张量?

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

如果列包含空值,则PANAS查询不起作用