5

メンバーシップ ベースの Web サイトで記事を表示するアプリを作成しています。

アプリの所有者がメンバーでなくても、「メンバーのみ」として設定された記事をアプリが読み、表示できるようにしたいと考えています。

そのため、アプリのユーザーにユーザーやパスワードの情報を表示せずにログインできるようにしたいと考えています。

メンバー限定の記事にアクセスしようとすると、リダイレクトが表示されますが、認証チャレンジが表示されません。

アプリに自動的にログインさせる方法はありますか?

フォームの外観は次のとおりです。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>
4

2 に答える 2

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];
于 2010-01-16T05:15:46.680 に答える
0

あなたのサイトがどのように認証されているかわかりません...しかし、リダイレクトされていると述べたので、何らかのWebフォームを介していると思います。

私が似たようなことをしなければならなかったとき、Web リクエストを処理する単一のオブジェクトがあり、ログイン ページへのリダイレクトを処理し、オブジェクトの消費者に応答を送信する前に実際のページに進みました。

興味深いビットは次のとおりです。

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

body の String は、Web フォームがブラウザで生成した www フォーム エンコード パラメータでした。サイトには、ログインが正しかったときに転送するページを持つ next_url パラメータがありました。
コードの後半で、ログインが成功したことを確認しますが、正しいページにリダイレクトされたか、不正なログイン ページにリダイレクトされたかを確認します。

于 2010-01-16T03:34:19.737 に答える