SFSafariViewController登出后仍保留登录状态,清除缓存Cookie无效如何解决
问题根因
SFSafariViewController 与系统 Safari 共享数据存储,和你的 App 自身沙盒完全隔离。你当前代码中删除 URLCache.shared 与 HTTPCookieStorage.shared 的操作,仅能清除 App 本身的缓存和Cookie,完全无法触达 SFSafariViewController 内存储的登录态信息,因此无法解决登录态残留的问题。
可行解决方案
以下两种方案任选其一即可解决问题:
方案1:给OAuth授权链接增加强制登录参数
GitHub OAuth 支持prompt=login参数,添加后会强制要求用户重新登录,忽略已保存的会话状态,修改你的授权链接拼接逻辑即可:
// 原来的urlString后追加&prompt=login let urlString = "https://github.com/login/oauth/authorize?client_id=\(clientId)&scope=\(scope)&prompt=login"
该方案优势是不会影响系统Safari内其他网站的已存登录态。
方案2:开启SFSafariViewController临时会话模式
iOS 11及以上系统支持临时会话配置,开启后本次SFSafariViewController的所有数据都不会持久化存储,关闭后直接销毁,完全不会残留登录态,适配所有站点场景,修改SFSafariViewController初始化逻辑即可:
let config = SFSafariViewController.Configuration() config.prefersEphemeralSession = true let safariViewController = SFSafariViewController(url: url, configuration: config)
内容的提问来源于stack exchange,提问作者PArk
相关产品推荐
相关产品推荐

