2010-01-16 3 views
5

J'écris une application qui affichera des articles sur un site Web basé sur les membres.Connexion sans afficher de page de connexion

Nous souhaitons que l'application puisse lire et afficher les articles définis comme "membres seulement", même si le propriétaire de l'application n'est pas membre. Donc, je veux pouvoir me connecter sans montrer à l'utilisateur de l'application les informations d'utilisateur ou de mot de passe. Lorsque j'essaie d'accéder à un article réservé aux membres, j'obtiens une redirection, mais je n'obtiens pas de problème d'authentification.

Des idées comment je peux obtenir mon application pour vous connecter automatiquement?

Voici à quoi ressemble la forme. Dois-je inclure toutes les valeurs d'entrée dans ma demande 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> 

Répondre

3

Utilisez la bibliothèque http://allseeing-i.com/ASIHTTPRequest/ son beaucoup plus facile à utiliser que les demandes NSURL standard. Il y a aussi beaucoup de bon exemple de code si vous aimez voir un exemple de travail. Je l'ai utilisé sur un projet récemment et ça marche vraiment bien j'ai dû me connecter à un site automatiquement et ça a fonctionné parfaitement. Bonne chance.

Edit:

En regardant la forme que vous venez d'envoyer. Ce code devrait vous aider à soumettre le formulaire en utilisant la bibliothèque ASIHTTPREQUEST. Cela devrait vous aider à démarrer ...: 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

Cela fonctionne parfaitement. THX. –

+0

Pas de problème: D !! –

0

Vous ne savez pas comment votre site s'authentifie ... Mais comme vous avez mentionné être redirigé, je le suppose via un formulaire Web. Quand je devais faire quelque chose de similaire, j'avais un seul objet qui s'occupait des webrequests, et il s'occupait de la redirection vers la page de connexion, puis continuait sur la page actuelle avant d'envoyer une réponse au consommateur de L'object.

Les bits intéressants seraient:

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

Je l'ai fait: (code 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 ; 

Lorsque la chaîne pour le corps était le www-forme params codées que le formulaire Web aurait généré dans le navigateur. Le site avait un paramètre next_url qui avait la page à transmettre lorsque la connexion était correcte.
Plus tard dans le code, je vérifie que la connexion a été réussie, mais je vérifie si j'ai été redirigé vers la bonne page ou redirigé vers la mauvaise page de connexion.

Questions connexes