2010-01-16 30 views
5

Estoy escribiendo una aplicación que mostrará artículos en un sitio web basado en membresía.Iniciando sesión sin mostrar una página de inicio de sesión

Queremos que la aplicación pueda leer y mostrar los artículos que están configurados como "solo miembros", incluso si el propietario de la aplicación no es miembro.

Así que quiero poder iniciar sesión sin mostrar al usuario de la aplicación ningún usuario o información de contraseña.

Cuando intento acceder a un artículo solo para miembros, obtengo una redirección, pero no recibo un desafío de autenticación.

¿Alguna idea de cómo puedo hacer que mi aplicación inicie sesión automáticamente?

Así es como se ve el formulario. ¿Debo incluir todos los valores de entrada en mi solicitud POST?

<FORM ACTION="https://www.mysite.com/cgi-bin/mysite/process" METHOD=POST> 
<input type="hidden" NAME="mv_todo" VALUE="return"> 
<input type="hidden" name="mv_session_id" value="DySUxWM5"> 
<INPUT TYPE="hidden" name="mv_success_variable_hash" VALUE=""> 
<INPUT TYPE="hidden" name="mv_success_variable_hash_colon" VALUE=""> 
<INPUT TYPE="hidden" NAME="mv_successpage" VALUE="index"> 
<input type="hidden" name="mv_failpage" value="login"> 

<input value="1942255628Hx0xE2S5iCw0caMyNmrf7j2ROvvM0QUJoEVLVz+2PRq4Jjs4azdjrjWSnwN7JkIr" name="form_fn" type="hidden"><input value="login" name="form_page" type="hidden"><input value="1" name="login_form_2_revisit" type="hidden"><table cellpadding="4" class="standard_form"> 
<tr><td colspan="2"><font color=red><b>New Visitors:</b></font> <a href="http://www.mysite.com/cgi-bin/mysite/account_create.html">Create a new account</a></td></tr> 
<tr><td class="standard_form_field"><b>Username:</b></td> 
<td colspan="1"><input maxlength="64" name="mv_username" onChange="if (this.value.match(/(^\s+)|(\s+$)/)){this.value = this.value.replace(/(^\s+)|(\s+$)/g,'');}if (this.value.match(/^$/) && !this.getAttribute('js_init_now')) {alert('This is a required field. Please make sure that it is not empty.'); this.focus();this.select();return false; }; " type="text" size="15"></td></tr> 

<tr><td class="standard_form_field">Password:</td> 
<td colspan="1"><input name="mv_password" type="password" size="15"></td></tr> 
<tr><td colspan="2"><input value="1" name="persistent_login" type="checkbox"> Remember my login info.</td></tr> 
<tr><td colspan="2"><input value="" name="login_complete_param" type="hidden"> <input value="Continue..." name="ig_click form-method:continue" type="submit" class="coolButton"></td></tr> 
</table> 
<p ></p> 

</form> 

Respuesta

3

Usar la biblioteca http://allseeing-i.com/ASIHTTPRequest/ es mucho más fácil de usar que las solicitudes NSURL estándar. También hay mucho código de muestra realmente bueno si te gusta ver un ejemplo de trabajo. Lo utilicé en un proyecto recientemente y funciona muy bien. Tuve que iniciar sesión en un sitio automáticamente y funcionó perfectamente. Buena suerte.

Editar:

En cuanto a la forma que acaba de publicar. Este código debería ser de ayuda para enviar el formulario usando la biblioteca ASIHTTPREQUEST. Esto debería comenzar ...: D

NSURL *url = [NSURL URLWithString:@"https://www.mysite.com/cgi-bin/mysite/process"]; 
ASIFormDataRequest *requestPOST = [ASIFormDataRequest requestWithURL:url]; 
[requestPOST setPostValue:@"return" forKey:@"mv_todo"]; 
[requestPOST setPostValue:@"DySUxWM5" forKey:@"mv_session_id"]; 
[requestPOST setPostValue:@"" forKey:@"mv_success_variable_hash"]; 
[requestPOST setPostValue:@"" forKey:@"mv_success_variable_hash_colo"]; 
[requestPOST setPostValue:@"index" forKey:@"mv_successpage"];     
[requestPOST setPostValue:@"login" forKey:@"mv_failpage"];     
[requestPOST setPostValue:@"942255628Hx0xE2S5iCw0caMyNmrf7j2ROvvM0QUJoEVLVz+2PRq4Jjs4azdjrjWSnwN7JkIr" forKey:@"form_fn"]; 
[requestPOST setPostValue:@"login" forKey:@"form_page"]; 
[requestPOST setPostValue:@"1" forKey:@"login_form_2_revisit"]; 
[requestPOST setPostValue:@"PUT YOUR USERNAME VARIABLE IN HERE" forKey:@"mv_username"]; 
[requestPOST setPostValue:@"PUT YOUR PASSWORD VARIABLE IN HERE" forKey:@"mv_password"]; 
[requestPOST setPostValue:@"1" forKey:@"persistent_login"]; 
[requestPOST setPostValue:@"" forKey:@"login_complete_param"]; 
[requestPOST setPostValue:@"Continue..." forKey:@"ig_click form-method:continue"]; 
[requestPOST start]; 
+0

Esto funciona perfectamente. Gracias. –

+0

No hay problema: D !! –

0

No estoy seguro de cómo su sitio está autenticando ... Pero ya que ha mencionado siendo redirigido su Asumo través de algún formulario web.

Cuando tenía que hacer algo similar, tenía un único objeto que se encargaba de las búsquedas webreques, y se ocupaba de la redirección a la página de inicio de sesión, luego continuaba en la página actual antes de enviar una respuesta al consumidor de el objeto.

Los bits interesantes estarían en:

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse { ... 

que hice: (código de pseudo-ish)

NSURL* redirected_url = [request URL] ; 
NSString* querystr = [redirected_url query] ; 
if ([self need_to_login:redirected_url]) { 
    NSString* body = [self generate_login_body_string] ; 
    request = [self makeRequestLocation:@"/sign_in" Method:@"POST" Body:body] ; 
} 
return request ; 

donde la cuerda para el cuerpo era el de forma www params codificados que la forma de la tela habría generado en el navegador. El sitio tenía un param next_url que tenía la página para reenviar cuando el inicio de sesión era correcto.
Más adelante en el código verifico para asegurarme de que el inicio de sesión fue exitoso, pero comprobando si fui redireccionado a la página correcta o redireccionado a la página de inicio de sesión incorrecta.

Cuestiones relacionadas