1

Django に POST を送信し、Django 側でユーザーを認証してセッションを開始する基本的な認証システムを iOS で作成しようとしています。現在、値をデータとして URL に渡して認証することでユーザー情報を送信できますが、Django 応答からセッション データまたは Cookie を取得するにはどうすればよいですか? Cookie を保存または印刷しようとすると、配列が空であることがわかります。request.requestCookies と request.responseCookies の両方を試しました。

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"test_user", @"username", @"pass", @"password", nil];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1:8000/login/"]];

NSError *error;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];

if ( error ) {
    NSLog( @"ERROR - %@", error.localizedDescription );
} else {
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request addRequestHeader: @"Content-Type" value:@"application/json; charset=utf-8"]; 
    [request appendPostData:data];
    [request setRequestMethod:@"POST"];

    [request setCompletionBlock:^{

        UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"Login"
                                                           message:@"Login was sent"
                                                          delegate:nil
                                                 cancelButtonTitle:nil
                                                 otherButtonTitles:@"Ok", nil];
        [alerView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];

        NSLog(@"RESPONSE: %@", [[NSString alloc] initWithData:request.responseData encoding:NSUTF8StringEncoding]);//, [request.requestCookies objectAtIndex:0]);
        NSLog(@"COOKIE: %@", [request.requestCookies objectAtIndex:0]);
        [ASIHTTPRequest addSessionCookie:[request.requestCookies objectAtIndex:0]];

    }];
4

1 に答える 1

0

さて、この問題を解決しました。サーバー側でデータを入力していましたが、Djangoで正式にログインしていなかった(適切なCookieを返さなかった)ため、アプリが適切なヘッダーを受信して​​いませんでした。

于 2012-04-26T17:13:55.390 に答える