我在iOS應用程序中使用SSKeychain的憑證庫存在一個奇怪的錯誤。當用戶登錄時,我在證書存儲中存儲了一堆信息。但最近憑證商店不設置項目。SSKeychain憑證存儲未正確設置?
奇怪的是,它不會一直髮生。有時它會設置信息並按預期工作。其他時間,登錄後憑據存儲值返回nil
。我的代碼如下所示:
- (void)login:(id)sender {
[SVProgressHUD show];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager setResponseSerializer:[LoginResponseSerializer serializer]];
__weak typeof(self)weakSelf = self;
NSString *urlString = [NSString stringWithFormat:@"%s%s", kBaseURL, kLoginURL];
if (self.passwordField.text && self.emailField.text) {
NSDictionary *params = @{ @"email": self.emailField.text, @"password": self.passwordField.text};
self.sessionManager = manager;
[manager POST:urlString parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
// prgress implementation
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *user = [responseObject objectForKey:@"user"];
NSString *token = user[@"auth_token"];
NSString *avatarURL = user[@"avatar_url"];
NSString *userID = [NSString stringWithFormat: @"%@", user[@"id"]];
NSString *firstName = user[@"first_name"];
NSString *lastName = user[@"last_name"];
NSString *levelOfStudy = user[@"level"];
BOOL teecher = [user[@"teecher"] boolValue];
[weakSelf.credentialStore setTeecher:teecher];
[weakSelf.credentialStore setUserId:userID];
[weakSelf.credentialStore setAvatarURL:avatarURL];
[weakSelf.credentialStore setAuthToken:token];
[weakSelf.credentialStore setFirstName:firstName];
[weakSelf.credentialStore setLastName:lastName];
[weakSelf.credentialStore setLevelOfStudy:levelOfStudy];
[weakSelf.credentialStore setEmail:self.emailField.text];
[weakSelf.credentialStore setPassword:self.passwordField.text];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setValue:token forHTTPHeaderField:@"auth_token"];
[manager setResponseSerializer:[CustomerResponseSerializer serializer]];
NSString *urlString = [NSString stringWithFormat:@"%s%s", kBaseURL, kCustomerURL];
[manager GET:urlString parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
// progress implementation
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *sources = [responseObject objectForKey:@"sources"];
NSArray *cards = (NSArray *)sources[@"data"];
[weakSelf.credentialStore setHasCreditCard:(cards.count > 0)];
[weakSelf.credentialStore setSignUp:false];
[SVProgressHUD dismiss];
[self.navigationController popViewControllerAnimated:NO];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[SVProgressHUD showErrorWithStatus:@"Failed to refresh cards."];
}];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[SVProgressHUD showErrorWithStatus:@"Login Failed"];
}];
}
}
正如你可以成功看到我存儲項目的證書存儲,但目前這一個運氣的遊戲,它的工作原理的40%的時間和沒有60%,這是什麼混亂。我也在努力在模擬器上重新創建問題。
如果有人有任何想法?或需要看到更多的代碼讓我知道。
你只能在模擬器注意到這一點?我遇到過類似的問題,那就是數據沒有被刪除,而且行爲也不穩定。重新啓動Xcode和模擬器似乎有所幫助,但有時會再次回來。我認爲這只是Xcode的最新版本而不是SSKeychain的一些奇怪之處。 –
另外,SSKeychain在撰寫本文時已被棄用,以支持SAMKeychain。相同的類和行爲,所以您只需要將您的SSKeychain實例重命名爲SAMKeychain。 –
它實際上發生在我的設備和模擬器上。啊可能會升級到SAMKeychain,看看是否有幫助 – jckly