ios - SSKeychain 凭证存储设置不正确?

标签 ios objective-c keychain sskeychain

我的 iOS 应用程序中的 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% 的情况下无效,这令人困惑。我也在努力在模拟器上重现这个问题。

如果有人有任何想法?或者需要查看更多代码让我知道。

最佳答案

我有一个类似的问题,当我添加钥匙串(keychain)共享权利时它得到了修复。

有关如何启用钥匙串(keychain)共享的更多详细信息: https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW15

关于ios - SSKeychain 凭证存储设置不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329338/

相关文章:

iphone - 处理图像时的 iOS 设置进度条值

iphone - UIImageView 旋转动画带易出

ios - 如何为 iOS Mobile SDK 生成许可证 key

objective-c - 获取当前的 iCloud 同步状态

objective-c - 创建日期范围

objective-c - 如何在 OS X 中成功删除钥匙串(keychain)中的项目?

c# - 从导航堆栈中删除时从 UIViewController 中删除数据

iphone - 将 UINavigationBar 背景图像更改为默认 - iOS 4.3

ios - IO : ios app development option greyed out

swift - 使用 Locksmith 和 Swift 4 删除 token