2011-07-27 8 views
0

シナリオ:ユーザーを認証します。クッキーをつかみ、他のリクエストのためにクッキーを設定します。ファイン。私がすぐに理解できないのは、次のビューを画面にプッシュしなくても認証が失敗した場合の対処方法です。私の応答が{エラー:{パスワード:一致しない}}なら、私はこの応答も解析し、それに応じて条件を作成すべきですか?私は単にレスポンスコードをチェックすべきですか?私はこれを難しくしている、私は言うことができる。接続が終了すると、それが自然に次のビューを押すと、 NSURLConnectionとNSHTTPCookie

ので(NSURLConnection *)接続:

  • (無効)connectionDidFinishLoading:私は私の中で次のビューを追加しました。私は、認証が失敗した場合でも、ここに来ることを防ぐつもりです。多分私はここから私の次のビューをプッシュしないでください。どこに?

答えて

1

リダイレクトパスを確認します。これは、認証が正常に行われたかどうかを示しています。

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

    NSLog(@"willSendRequest (from %@ to %@)", redirectResponse.URL, request.URL); 
    NSString *from = [NSString stringWithFormat:@"%@",redirectResponse.URL]; 
    NSString *to = [NSString stringWithFormat:@"%@",request.URL]; 
    if([from isEqualToString:serverSignInPath]) 
     //logged=true 
    else 
    //logged=false 
} 
+0

ええ、それはクールです。私は似たようなことを読む。どちらの解決策も私が想定しているとおりです。 RedirectまたはStatusCodeを使用すると、ちょっと待っていただけです。 –

0
NSURLResponse *HTTPResponse = (NSURLResponse *)response; 
NSInteger statusCode = [HTTPResponse statusCode]; 

if (404 == statusCode || 500 == statusCode) { 
    [connection cancel]; 
    [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] setNetworkActivityIndicatorVisible:NO]; 
} 

この方法では、それは次のビューをプッシュするconnectionDidFinishLoadingことを得ることはありません。

Railsの応答は次のようになります。

render :json => @foo.to_json, :status => 404