在iOS应用中使用Firebase进行身份验证 - 在刷新令牌失败后,在登录时不断收到错误代码FIRAuthErrorDomain:17020

时间:2017-03-17 18:25:05

标签: firebase firebase-authentication

我在我的iOS应用中使用Firebase SDK 3.8进行电子邮件/密码身份验证。我让用户输入他们的电子邮件/密码,然后我打电话给

[[FIRAuth auth] createUserWithEmail:email password:password completion:^(FIRUser *_Nullable user, NSError *_Nullable error)

一旦他们成功进行身份验证,我就会使用他们的身份验证令牌在我自己的服务器上调用API。我的服务器使用Firebase文档中描述的逻辑验证JWT,以确保令牌有效。每小时,令牌过期,我的服务器返回401.然后iOS客户端尝试刷新令牌:

- (void)refreshUserToken:(BOOL)force {
        ...
        [self.firebaseUser getTokenWithCompletion:^(NSString *_Nullable idToken, NSError *_Nullable error) {
            if (error) {
                // Handle error
                [self resetAndGoToSignUp];
            } else {
                self.firebaseToken = idToken;
                ...
            }
        }];

}

resetAndGoToSignUp函数执行此操作:

// Sign out Firebase User
NSError *error;
BOOL status = [[FIRAuth auth] signOut:&error];
if (!status) {
    // show user alert
    ...
}
// go to my sign up page
AppDelegate *appDelegateTemp = (AppDelegate *)[[UIApplication sharedApplication] delegate];

appDelegateTemp.window.rootViewController = [[UIStoryboard storyboardWithName:@"SignUp" bundle:[NSBundle mainBundle]] instantiateInitialViewController];

此时,当用户输入他们的电子邮件/密码时,firebase createUserWithEmail API始终返回:

FirAuthErrorDomain: 17020

这应该是一个临时的网络错误,但它会继续返回相同的错误。我甚至尝试删除并重新安装应用程序从头开始,API继续返回相同的东西。基本上,一旦用户无法刷新令牌,似乎他们永远无法重新进入我的应用程序。 (如果令牌和凭证存储在钥匙串中,则删除/重新安装可能无法解决任何问题)。首次启动时,当我根据NSUserDefaults检测到您之前没有使用过该应用程序时,我也会调用此代码以确保您已退出:

// Sign out Firebase User here
NSError *error;
BOOL status = [[FIRAuth auth] signOut:&error];

但这似乎没有帮助。我仍然收到错误17020.我必须按照我调用Firebase API的顺序做错事。有没有人碰到这个并找到了解决方案?

如果它有帮助,这至少发生在两个不同的设备上 - iPad和iPhone6s,一个运行iOS 10.2,另一个运行iOS 9.3.5

更新 - 已解决

我一次又一次得到17020的原因是我在执行另一系列测试时拒绝了我的应用程序的Cellular Data权限,而且还没有使用wifi。一旦我重新启用了蜂窝数据,我就可以登录了。: - /

0 个答案:

没有答案