2010-01-16 3 views
5

Я пишу приложение, которое будет отображать статьи на веб-сайте, основанном на членстве.Вход без отображения страницы входа

Мы хотим, чтобы приложение могло читать и отображать статьи, которые заданы как «только члены» - даже если владелец приложения не является членом.

Таким образом, я хочу, чтобы у меня была возможность входа в систему, не отображая пользователю приложения никакой информации о пользователе или пароле.

Когда я пытаюсь получить доступ к статье только для членов, я получаю перенаправление, но я не получаю проверку подлинности.

Любые идеи, как я могу получить свое приложение для входа в систему автоматически?

Вот как выглядит форма. Должен ли я включать все входные значения в мой запрос 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> 

ответ

3

Использование библиотеки http://allseeing-i.com/ASIHTTPRequest/ ее намного проще в использовании, чем стандартные запросы NSURL. Также есть много действительно хорошего образца кода, если вам нравится видеть рабочий пример. Я использовал его в проекте недавно, и он работает очень хорошо, я должен был автоматически войти на сайт и работать отлично. Удачи.

Edit:

Глядя на форму вы просто публикуемую. Этот код должен помочь вам, так как вы должны отправить форму, используя библиотеку ASIHTTPREQUEST. Это должно вас начать ...: 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

Это прекрасно работает. Спасибо. –

+0

Нет проблем: D !! –

0

Не знаете, как ваш сайт проходит проверку подлинности ... Но поскольку вы упомянули, что перенаправляетесь, я предполагаю его через некоторую веб-форму.

Когда мне приходилось делать что-то подобное, у меня был единственный объект, который заботится о веб-записях, и он позаботился о перенаправлении на страницу входа в систему, а затем продолжил на фактическую страницу перед отправкой ответа потребителю объект.

Интересные биты будут в:

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

я сделал: (псевдо-иш код)

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 ; 

Если строка для тела была WWW-формы, закодированные PARAMS, что веб-формы были бы созданы в браузере. На сайте был параметр next_url, который имел страницу для пересылки, когда логин был прав.
Позже в коде я проверяю, чтобы логин был успешным, но проверяя, был ли я перенаправлен на правильную страницу или перенаправлен на страницу неудачного входа.

 Смежные вопросы

  • Нет связанных вопросов^_^