使用JavaScript从UIWebView清除凭据

Hor*_*cio 6 javascript ruby-on-rails uiwebview devise ios

一些背景:

这是一个rails使用4.2 Web应用程序deviseomniauth-facebook其设定trueapple-mobile-web-app-capable

通过Safari中的URL,用户可以将Web应用程序添加到其iOS设备的主屏幕.

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

换句话说,一旦您使用Facebook登录,Web应用程序(UIWebView)每次都会应用相同的凭据.无论您的Facebook在Safari中的当前用户,或者您是否从Web应用程序注销.

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

此功能适用于浏览器 - Safari,Mobile Safari和Chrome.

我发现Safari和UIWebView在不同的地方保存数据,但不确定如何访问UIWebView数据(cookie /会话/凭证)以删除它.

我想通过JavaScript来做到这一点.但是,我对其他选择持开放态度.请注意,这是一个Rails应用程序.

代码:

的Gemfile

gem "rails",              "~> 4.2"
gem "devise",             "~> 3.5"
gem "omniauth-facebook",  "~> 3.0"
Run Code Online (Sandbox Code Playgroud)

application.html.haml

%head
  %meta{ name: "apple-mobile-web-app-capable", content: "yes" }/
Run Code Online (Sandbox Code Playgroud)

查看(HAML)

= link_to destroy_user_session_path, method: :delete do
  .css_classes Sign Out
Run Code Online (Sandbox Code Playgroud)

sessions_controller.rb - 来自Devise

def destroy
  super
  cookies.clear
end
Run Code Online (Sandbox Code Playgroud)


JAL*_*JAL 0

UIWebViewcookies一般存储在NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies. 该单例中还存储了一些其他好东西。我有几个想法:

  1. 通过注销然后登录所有 cookie 来验证您的 Ruby 调用实际上正在清除 cookie sharedHTTPCookieStorage。如果未清除 cookie,请手动清除它们。

  2. 设备的 Safari 设置可能会干扰 cookie 的存储和删除。验证您的 cookie 接受策略:NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always

  3. 考虑使用 aWKWebView和未记录的内容WKProcessPool来刷新和管理 cookie。

我意识到这些不是纯 JavaScript 选项。我不确定你所问的问题是否可以通过 JavaScript 桥实现。