2016-06-05 22 views
6

Alcuni contesto:Cancella credenziali da UIWebView con JavaScript

Si tratta di un'applicazione rails 4,2 web utilizzando devise e omniauth-facebook che definisce true per apple-mobile-web-app-capable

da un URL in Safari, gli utenti possono aggiungere l'applicazione web per la loro schermata iniziale del dispositivo iOS.

Il problema qui è che quando gli utenti effettuano l'accesso w/Facebook per la seconda volta, si autentica con lo stesso utente di prima, anche se l'utente si è disconnesso dall'app Web e da Facebook in Safari.

In altre parole, una volta effettuato l'accesso con Facebook, l'app Web (UIWebView) applica sempre le stesse credenziali. Indipendentemente dall'attuale utente di Facebook in Safari o se si è disconnessi dall'app Web.

Ciò accade anche se l'app Web - UIWebView è stata rimossa dalla schermata principale del dispositivo iOS.

Questa funzionalità funziona bene dai browser - Safari, Mobile Safari e Chrome.

Ho trovato che Safari e UIWebView salvano i dati in posti diversi, ma non sono sicuro che come accedere ai dati di UIWebView (cookie/sessione/credenziali) per rimuoverli.

Mi piacerebbe farlo tramite JavaScript. Tuttavia, sono aperto ad altre opzioni. Per favore, tieni in considerazione che questa è un'app Rails.

Il codice:

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" }/ 

vista (HAML)

= link_to destroy_user_session_path, method: :delete do 
    .css_classes Sign Out 

sessions_controller.rb - da Devise

def destroy 
    super 
    cookies.clear 
end 


risposta

0

UIWebView cookie sono generalmente memorizzati in NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies. Ci sono altre chicche memorizzate in quel singleton. Ho un paio di idee:

  1. verificare che in realtà la chiamata rubino sta cancellando i cookie accedendo fuori e poi la registrazione di tutti i cookie in sharedHTTPCookieStorage. Se i cookie non vengono cancellati, cancellarli manualmente.

  2. Le impostazioni di Safari del dispositivo potrebbero interferire con la memorizzazione e la rimozione dei cookie.Accetto i cookie: NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always

  3. Considerare l'utilizzo di un e lo WKProcessPool non documentato per svuotare e gestire i cookie.

Mi rendo conto che non si tratta di semplici opzioni JavaScript. Non sono sicuro che ciò che stai chiedendo sia possibile tramite il ponte JavaScript.

+0

Grazie JAL. Come posso accedere a 'NSHTTPCookieStorage.sharedHTTPCookieStorage(). Cookies'? Ho cercato su Google, ho trovato: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/index.html Ma non ho alcuna esperienza con Swift/Objective-C. In modo che, non so nemmeno dovessero guardare. – Horacio

+0

@Horacio Stai usando Objective-C o Swift? Poiché hai menzionato 'UIWebView', ho presupposto che tu disponga di un'app per la visualizzazione web della shell che carica un URL. In base alla tua lingua, posso fornire uno snippet di codice per accedere ai cookie dalla memoria dei cookie. – JAL

+0

A meno che non si stia semplicemente utilizzando Safari e si stia creando un collegamento a un sito Web per la propria pagina Web e non si disponga di un'app di shell. – JAL