2010-01-16 6 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 요청보다 훨씬 쉽게 사용할 수 있습니다. 또한 실제 예제를보고 싶다면 정말 좋은 샘플 코드가 많이 있습니다. 나는 최근에 프로젝트에 그것을 사용하고 그것은 정말 잘 사이트에 자동으로 로그인했다 그것은 완벽하게 작동합니다. 행운을 빕니다.

편집 :

방금 ​​게시 한 양식을 확인하십시오. 이 코드는 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 { ... 

:에

흥미로운 비트는 것 (사이비 틱 코드) 몸의 캐릭터가 WWW-encode 형식 PARAMS했다

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 ; 

그 웹 양식 브라우저에서 생성 된 것입니다. 사이트에 로그인 할 때 전달할 페이지가있는 next_url 매개 변수가 있습니다.
나중에 코드에서 로그인이 성공했는지 확인하지만 올바른 페이지로 리디렉션되었는지 또는 잘못된 로그인 페이지로 리디렉션되었는지 확인합니다.

관련 문제