python - 如何在 Google App Engine 服务上运行的应用程序之间共享登录 cookie?

标签 python flask google-app-engine cookies plotly-dash

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

我希望已成功登录应用程序 1 (app1) 的用户无需作为事件用户再次登录应用程序 2 (app2) ID 存储在 Flask session 中(提供跨应用程序的通用 key )。事实上,在本地部署时这可以按预期工作:

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(标准环境)上运行的两个服务上部署两个应用程序时,我无法重现此情况,即我需要登录 app1 AND app2 分开,这是不可取的。

由于 app1 部署在 https://PROJECT_ID.REGION_ID.r.appspot.com 上(默认服务)和 https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com 上的 app2 (第二项服务),我本以为按如下方式配置 Flask 应用程序会起作用(根据 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 不会保留在网络浏览器上。

我也尝试过摆弄其他 Flask 配置值,但没有一个能解决我的问题。

任何帮助将不胜感激!

最佳答案

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

It's because appspot.com was added to the public suffix list of domains that modern browsers should not allow cookies to be set for: see here

我猜这已经扩展到 .r.appspot.com.<REGION_ID>.r.appspot.com自从尝试改变 SESSION_COOKIE_DOMAIN这些值并没有解决问题。

此外,我认为这没有链接到网络浏览器,因为 FireFox 和 Google Chrome 都拒绝 cookie。

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

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

关于python - 如何在 Google App Engine 服务上运行的应用程序之间共享登录 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76200717/

相关文章:

python - 如何根据列值比较在 python 中过滤 Pandas 数据框?

python - Flask 与 Heroku,导入错误 : No module named Flask

python - Python SQLAlchemy中的依赖问题?

java - 无法解析 appengine java sdk 提供的 DataNucleus jar 中的 org.datanucleus.store.appengine.query.JDOCursorHelper

jquery - 将 jQuery POST 发送到 Django View

python - 如何限制对 Django 管理页面的访问?

python - 添加具有颜色属性的边/节点

python - 使用 Flask-FlatPages 列出特定文件夹中的文件

java - 本地机器上的 MySQL 谷歌应用程序引擎 - 错误

java - 谷歌应用程序引擎跨模块 session (java,guice)