2010-01-16 46 views
5

Tôi đang viết một ứng dụng sẽ hiển thị các bài viết tại trang web dựa trên tư cách thành viên.Đăng nhập mà không hiển thị trang đăng nhập

Chúng tôi muốn ứng dụng có thể đọc và hiển thị các bài viết được đặt là "chỉ thành viên" - ngay cả khi chủ sở hữu ứng dụng không phải là thành viên.

Vì vậy, tôi muốn có thể đăng nhập mà không hiển thị cho người dùng ứng dụng bất kỳ thông tin người dùng hoặc mật khẩu nào.

Khi tôi cố truy cập bài viết chỉ dành cho thành viên, tôi nhận được chuyển hướng, nhưng tôi không nhận được thử thách xác thực.

Mọi ý tưởng làm cách nào để ứng dụng của tôi có thể đăng nhập tự động?

Đây là hình thức của biểu mẫu. Tôi có phải bao gồm tất cả các giá trị đầu vào trong yêu cầu POST của mình không?

<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> 

Trả lời

3

Sử dụng thư viện http://allseeing-i.com/ASIHTTPRequest/ dễ sử dụng hơn sau đó là yêu cầu NSURL chuẩn. Ngoài ra còn có rất nhiều mẫu mã thực sự tốt nếu bạn thích nhìn thấy một ví dụ làm việc. Tôi sử dụng nó trên một dự án gần đây và nó hoạt động thực sự tốt, tôi đã phải đăng nhập vào một trang web tự động và nó hoạt động hoàn hảo. Chúc may mắn.

Chỉnh sửa:

Nhìn vào biểu mẫu bạn vừa đăng. Mã này sẽ giúp bạn đó là cách bạn sẽ gửi biểu mẫu bằng cách sử dụng thư viện ASIHTTPREQUEST. Điều này sẽ giúp bạn bắt đầu ...: 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

Điều này hoạt động hoàn hảo. Cám ơn. –

+0

Không vấn đề gì: D !! –

0

Không chắc chắn về cách trang web của bạn đang xác thực ... Nhưng kể từ khi bạn đề cập được chuyển hướng, tôi giả định qua một số biểu mẫu web.

Khi tôi phải làm điều gì đó tương tự, tôi đã có một đối tượng duy nhất chăm sóc các yêu cầu web và nó chuyển hướng đến trang đăng nhập, sau đó tiếp tục trên trang thực tế trước khi gửi phản hồi tới người tiêu dùng đối tượng.

Các bit thú vị sẽ được:

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

tôi đã làm: (psuedo-ish đang)

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 ; 

Trường hợp String cho cơ thể là www-form params mã hóa mà các mẫu web có thể đã tạo trong trình duyệt. Trang web có thông số next_url có trang để chuyển tiếp đến khi thông tin đăng nhập chính xác.
Sau đó trong mã tôi kiểm tra để đảm bảo đăng nhập thành công, nhưng kiểm tra xem liệu tôi đã được chuyển hướng đến trang chính xác hay được chuyển hướng đến trang đăng nhập không hợp lệ.

Các vấn đề liên quan