我正计划将一个应用程序从使用SFSafariViewController的旧SFSafariViewController流切换到使用iOS 11的SFAuthenticationSession的新流。登录不是问题,向新API的传输花了我几分钟时间来实现。然而,注销让我感到困惑。
多么?
我找不到任何关于想要提供在文档中任何地方登录的选项的消息。使用旧的SFSafariViewController使cookie失效吗?不,他们不再和SFAuthenticationSession分享了。一旦我重新启动身份验证会话,用户就会自动登录,没有出路。那么如何启用注销呢?还是我完全忽略了一些显而易见的东西?
更新:我在技术上找到了一种“工作方式”,但这对用户来说是疯狂的:在注销页面上打开一个清除cookie的新SFAuthenticationSession。但这意味着当注销警报视图时,再次询问用户是否愿意通过该服务登录。如果选择是(“登录”),则会打开cookie清除注销页面,用户必须手动关闭视图,该视图可以被完成处理程序捕获,我们知道我们可以再次打开登录视图。是否显示要注销的登录提示?我真的不喜欢这个解决方案。
有什么想法吗?我是不是还忽略了一个显而易见的解决方案?
更新2:由于到目前为止还没有人知道这个问题,这可能不是一件容易的事情。我已经通过他们的报告工具向苹果提出了一个建议,要么澄清如何处理这个问题,要么将其构建到API中,如果无法获得。如果我得到答案的话会发帖的。
更新3:在仔细考虑了这个问题之后,我们找到了另一个可能的解决方案(虽然也没有吸引力),如果您可以影响OAuth提供者的登录页面的话:让cookies非常短暂。然后,无需自动登录即可打开登录页。然而,这却扼杀了应用程序之间共享登录会话的全部目的。你需要能够影响登录页面。
更新4:由于iOS 12被废弃,SFAuthenticationSession被ASWebAuthenticationSession取代。但是,ASWebAuthenticationSession在注销方面没有任何改变。但还是不可能。和以前一样的问题。
发布于 2020-09-18 20:57:37
使用ASWebAuthenticationSession,在调用.start()之前将.prefersEphemeralWebBrowserSession设置为true将迫使用户在浏览器会话中输入凭据。虽然这与注销不一样,但这将允许新用户在启动下一次会话时使用不同的凭据登录。
发布于 2020-04-26 09:06:31
更新2020年11月:我们使用@react本机社区/ cookies来清除cookies作为解决方案。请参阅下面的片段作为示例。
import CookieManager from '@react-native-community/cookies';
CookieManager.clearAll().catch(e => alert("Error deleting cookies during logout"))之前的答案是从2020年4月起的。这可能对任何挣扎于此的人都有帮助。我花了几个小时测试不同的选项,浏览应用程序,查看它们是如何做到的,并阅读论坛/讨论。
ASWebAuthenticationSession或SFAuthenticationSession登录过一次,下载的任何应用程序都不会要求登录FB。ASWebAuthenticationSession (如前所述,这是非常奇怪的UX)。( B)将Safari作为一个单独的应用程序打开(而不是在您的应用程序中),并在那里进行登录/注销。不幸的是,如果OAuth提供程序不支持注销时的重定向,则无法在注销后将用户重定向到应用程序。这很糟糕,因为这阻止了开发人员在iOS上为业务需要在多个用户之间共享设备并使用OAuth作为身份提供者的用例创建良好的体验。
发布于 2018-10-04 21:36:55
我遇到的“最佳”解决方案之一是在Safari (不是SFSafariViewController)中打开注销页面。因为ASWebAuthenticationSession与Safari可靠地共享cookie,因此过期/删除的cookie也会影响应用程序。
有关更多详细信息,请参阅这个GitHub页面。
https://stackoverflow.com/questions/47207914
复制相似问题