私はかなり基本的にRestKitを使用しており、リクエストRKClient
を行っています。get
私のシステムは、ユーザー名/パスワード/アカウントを使用してユーザーを認証します。ユーザー名/パスワードは単なる httpbasic であり、アカウントは単なるサブドメインです。
私が抱えている問題は、次のことを行う場合です。
- 正しい情報でサインインします (その後、アプリのすべてのデータをダウンロードします)
- データをリセットします (これにより、すべてのコア データ オブジェクトが削除され、共有 RKClient のユーザー名とパスワードも空白に設定されます)
- 間違ったユーザー名/パスワードを入力して、正しいアカウントを入力すると、すべて正しいかのようにデータがダウンロードされます。
ユーザー名とパスワードを設定する前後に puts を配置すると、正しくないデータに変更されていることがわかります。そして、キャッシングをRKRequestCachePolicyNone
(共有クライアントと RKRequest インスタンスの両方で) に設定しました。
返されたリクエストは、キャッシュからプルされていないことを示しています。そして、カールを使用して端末で問題を再現しようとすると、正しい応答が得られます(間違ったユーザー名パスワードではデータを取得できないということです)。
では、なぜ/どのようにしてRestKitが適切な応答を返すのでしょうか? サーバーにヒットし、200 応答が返されます。
コード例:
- (void)startDownload {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"username and password before (%@,%@)",[RKClient sharedClient].username,[RKClient sharedClient].password);
[RKClient sharedClient].username = self.login;
[RKClient sharedClient].password = self.password;
NSLog(@"username and password after (%@,%@)",[RKClient sharedClient].username,[RKClient sharedClient].password);
NSString *base = [NSString stringWithFormat:@"http://%@.%@api",self.accountName,[defaults stringForKey:@"myURL"]];
[[RKClient sharedClient] setBaseURL:base];
[[RKClient sharedClient] setAuthenticationType:RKRequestAuthenticationTypeHTTPBasic];
[[RKClient sharedClient] setCachePolicy:RKRequestCachePolicyNone];
RKRequest *request = [[RKClient sharedClient] get:@"/verify.json" delegate:self];
[request setCachePolicy:RKRequestCachePolicyNone];
}
アップデート
また、最初のログイン時に間違ったパスワードを入力すると、失敗として返されることにも気付きました。その後、パスワードを修正すると、その後は常に失敗します。