独立 PWA 中断登录

Posted

技术标签:

【中文标题】独立 PWA 中断登录【英文标题】:Standalone PWA breaks login 【发布时间】:2018-03-06 18:38:07 【问题描述】:

我们有一个用 Angular 编写的 PWA,我们使用 AzureAD(使用 ng-adal)进行登录。

当我们登录时,会进行一系列重定向,直到我们回到我们的应用程序(使用身份验证票)。如果我们将“manifest.json”配置为display:browser,一切都会按预期进行。如果我们将其设置为display:standalone,就会出现问题。这样,当我们在 android 中安装它时,我们会获得原生应用程序的外观和感觉(没有浏览器 chrome、启动屏幕等),但登录中断。

我们得到的效果是 AzureAD 页面在浏览器视图中打开(预期),但到我们页面的重定向仍然在浏览器视图中(左角有一个 X 按钮)。在这个“浏览器视图”中,我们通过了身份验证,但如果我们使用 X 按钮,这个视图将关闭,我们返回 PWA,但仍然未经身份验证。

知道会发生什么吗?

谢谢!

添加了quick example(这是对另一件事的测试)。

右上角的图标重定向到另一个域,该域重定向回该页面。如果我们将应用程序添加到 Android 主屏幕(它没有添加所有图标,因为我没有完全配置 PWA 清单,但效果是可以查看的),我们看到点击图标,一个 web 视图打开转到第一个重定向,但对第二个重定向保持打开状态。

我期望的是,第二个重定向将返回到我的 PWA,而没有 web-view chrome。

【问题讨论】:

通过浏览器视图登录后,下次以display: standalone 模式访问(或重新加载)PWA 时,“登录”状态是否正确反映? 不,当我登录时,我被重定向到新框架中的 azure AD(使用浏览器地址栏)。当此框架重定向回主页时(地址中有 id_token),我仍在此框架中,而不是被第一框架捕获。 当你在明确关闭浏览器视图后最终返回并重新加载/重新访问 PWA 时会发生什么? 它仍然没有经过身份验证(好像它从未收到过 id_token)。看起来它是完全分离的(独立应用程序与“浏览器”辅助应用程序)。我会尝试做一个小项目来重现我的问题... 谢谢——我正在与 Chrome for Android 团队的一些人聊天,讨论最近是否可能通过 display: standalone PWA 发生了一些变化,从而导致了这种情况。您是否碰巧有一个公共 URL,我们可以在该 URL 上重现该行为? 【参考方案1】:

最新版本的 Chrome (r67) 现已修复此问题。

【讨论】:

它在 Chrome 70 中又被破坏了,因为它打开了一个单独的窗口来进行范围外的身份验证。 但好消息是,Chrome 71(将于 2018 年 12 月发布)将永久修复此问题,因为 W3C 规范已更新为要求浏览器允许对超出范围的 URL 进行应用内导航。 github.com/w3c/manifest/issues/449#issuecomment-435217874 我遇到了同样的问题,但在 ios/Safari 上 ***.com/questions/53948916/… 有人可以帮忙吗? 在 Chrome 79 (Android) 上从设备照片库中选择图像时遇到类似问题。 PWA 在访问库之前是独立的。一旦我选择了照片(或取消),应用程序就会切换到浏览器模式。我可以进入全屏模式,但不能返回独立模式。这似乎与上述问题相似。

以上是关于独立 PWA 中断登录的主要内容,如果未能解决你的问题,请参考以下文章

iOS WebApp 的 FB.login 中断流程

STC32单片机 普通 I/O 口中断功能介绍和使用

GitLab 最重要 - 单点登录中断

Putty 密钥登录和如何解决网络连接中断问题

中断程序详解(附例题)

STM32外部中断EXTI简介