2011-08-31 16 views
5

Lo que estoy haciendo aquí es buscar una URL que tenga autenticación. Por lo tanto, yo uso la funciónBorrar las credenciales de UIWebView

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 

Cuando se enfrenta a la autenticación, presento una UIAlertView para introducir el nombre de usuario y contraseña y si el usuario ha introducido correctamente, este método se llama.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 

En este método, hago que la ventana de inicio de sesión desaparezca y aparezca en la vista de detalles.

problema surgió, cuando quería una funcionalidad cierre de sesión. Todo lo que quiero es eliminar las credenciales ingresadas por el usuario y recuperar esa URL nuevamente, para autenticación = propósito. Entonces, llamo al didReceiveAuthenticationChallenge.

Pero lo que sucede es que va directamente al método didReceiveResponse sin preguntar nada. El problema aquí es que soy y no puedo borrar las credenciales. ¿Me puedes ayudar a hacer esto?

¡Muchas gracias de antemano!

+1

Me encontré con este mismo problema con una vista web. ¡Gracias por hacer esta pregunta! –

Respuesta

7

código try para Borrar cookies de Solicitud

NSHTTPCookie *cookie; 
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [storage cookies]) 
{ 
    NSString* domainName = [cookie domain]; 
    NSRange domainRange = [domainName rangeOfString:@"twitter"]; 
    if(domainRange.length > 0) 
    { 
     [storage deleteCookie:cookie]; 
    } 
} 
+0

Gracias! Totalmente trabajado. Sin embargo, en mi caso, no estaba buscando URL asociadas con una determinada cadena. Quería destruir todas las cookies, así que hice la segunda línea seguida de un ciclo simple: respuesta con el código a continuación. –

+0

Deseo poder votar dos veces :) Muchas gracias – Hamid

3

sé que esto es una cuestión de edad, pero no tengo la respuesta aquí:

Resulta que las cookies no son la única manera de que UIWebView almacena datos. También hay esta cosa llamada persistente NSURLCredentialStorage y la única manera de limpiar es así:

NSLog(@"Logging out..."); 

// Clear credential storage 
NSURLCredentialStorage *credentialStorage = [NSURLCredentialStorage sharedCredentialStorage]; 
NSDictionary *credentialProtectionSpaces = [credentialStorage allCredentials]; 

for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces) 
{ 
    NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace]; 
    for (NSString * username in credentials) 
    { 
     [credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace]; 
     NSLog(@"clearing: %@", username); 
    } 
} 

NSLog(@"checking..."); 

credentialStorage = [NSURLCredentialStorage sharedCredentialStorage]; 
credentialProtectionSpaces = [credentialStorage allCredentials]; 
for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces) 
{ 
    NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace]; 
    for (NSString * username in credentials) 
    { 
     [credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace]; 
     NSLog(@"checking: %@", username); 
    } 
} 

'' ll encontrar que los nombres de usuario muestran la primera vez, pero no se muestran cuando se comprueba el segundo tiempo a través de la misma lazo. Han sido eliminados de NSURLProtectionSpaces.

-Sean

+0

¿Cómo se haría esto en Swift? 'para protectionSpace: NSURLProtectionSpace en credentialProtectionSpaces {' da el error "(NSURLProtectionSpace, [String: NSURLCredential]) '(alias' (NSURLProtectionSpace, Dictionary ) ') no es convertible a' NSURLProtectionSpace ' – James

3

Muy buena pregunta, y en mi caso no he podido averiguar por qué no podíamos cerrar la sesión de una vista web.

Utilicé un código de la primera respuesta, pero quería eliminar todas las cookies en todo el asunto en lugar de solo las asociadas con una determinada cadena o URL. Esto es lo que hice:

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

for (NSHTTPCookie *cookie in [cookieJar cookies]) { 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
} 

Y esto funcionó! Ahora, cuando finaliza la sesión, vuelve a la pantalla de inicio de sesión original todo el tiempo.

+0

¿Hay alguna manera? para hacer esto a través de Javascript?Tengo una aplicación web (Rails/devise/omniauth-facebook) y no puedo eliminar las credenciales de UIWebView. Le pregunté esto con más detalles aquí: http://stackoverflow.com/questions/37687130/clear-credentials-from-uiwebview-with-javascript – Horacio

Cuestiones relacionadas