一些背景:

这是一个使用railsdeviseomniauth-facebook 4.2网络应用程序,它将true设置为apple-mobile-web-app-capable
用户可以从Safari中的URL将Web应用添加到其iOS设备的主屏幕。

这里的问题是,当用户第二次使用Facebook登录时,即使用户从Web应用程序和Safari中的Facebook注销,它也会使用与以前相同的用户进行身份验证。



即使将Web应用程序-UIWebView从iOS设备的主屏幕上删除,也会发生这种情况。

此功能在Safari,Mobile Safari和Chrome浏览器中均可正常使用。

我发现Safari和UIWebView将数据保存在不同的位置,但是不确定如何访问UIWebView数据(cookies / session /凭证)以将其删除。

我想通过JavaScript做到这一点。但是,我愿意接受其他选择。请考虑一下这是一个Rails应用程序。

编码:

Gemfile

gem "rails",              "~> 4.2"
gem "devise",             "~> 3.5"
gem "omniauth-facebook",  "~> 3.0"

application.html.haml
%head
  %meta{ name: "apple-mobile-web-app-capable", content: "yes" }/

查看(HAML)
= link_to destroy_user_session_path, method: :delete do
  .css_classes Sign Out

sessions_controller.rb -来自Devise
def destroy
  super
  cookies.clear
end

最佳答案

UIWebView cookie通常存储在NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies中。该单例中还存储了其他一些好东西。我有一些想法:

  • 通过注销然后将所有cookie记录在sharedHTTPCookieStorage中,验证实际上您的ru​​by调用正在清除cookie。如果未清除Cookie,请手动清除它们。
  • 设备的Safari设置可能会干扰cookie的存储和删除。验证您的Cookie接受政策:NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
  • 考虑使用WKWebView和未记录的WKProcessPool刷新和管理cookie。

  • 我意识到这些不是纯JavaScript选项。我不确定您要问的内容是否可以通过JavaScript桥实现。

    08-25 14:10
    查看更多