2017-01-01 126 views
4

我正在使用Firebase將用戶登錄到我的應用中,但是當我添加管理其帳戶(如更改其電子郵件,密碼等)的功能時。該文件說,如果用戶最近沒有登錄,他們需要重新進行身份驗證,但我的問題是:如何檢查用戶是否最近登錄過?根據文檔錯誤將返回FIRAuthErrorCodeCredentialTooOld,但我該如何檢查?如何檢查用戶是否需要使用Firebase身份驗證重新進行身份驗證

From the Firebase docs:

回答

0

斯威夫特3 我不得不試圖刪除用戶時,該昨天做。有一件事要注意的是FIRAuthErrorCodeCredentialTooOld現在FIRAuthErrorCode.errorCodeRequiresRecentLogin

我所做的是觸發UIView要求登錄的詳細信息,如果該錯誤被拋出。由於我使用的是電子郵件和密碼,這就是我在示例中從用戶處收集的內容。

private func deleteUser() { 
    //get the current user 
    guard let currentUser = FIRAuth.auth()?.currentUser else { return } 

    currentUser.delete { (error) in 
    if error == nil { 
     //currentUser is deleted 
    } else { 
     //this gets the error code 
     guard let errorCode = FIRAuthErrorCode(rawValue: error!._code) else { return } 
     if errorCode == FIRAuthErrorCode.errorCodeRequiresRecentLogin { 
     //create UIView to get user login information 
     let loginView = [yourLoginUIViewController] 
     self.present(loginView, animated: true, completion: nil) 
     } 
    } 
} 

一旦我有登錄信息,我運行此功能重新認證用戶。在我來說,我在上面的代碼運行它loginView如果登錄成功:

func reauthenticateUserWith(email: String, password: String) { 
    FIRAuth.auth()?.signIn(withEmail: email, password: password) { (user, error) in 
    if error == nil { 
     //display UIView to delete user again 
     let deleteUserView = deleteUserView() 
     present(deleteUserView, animated: true, completion: nil) 
    } else { 
     //handle error 
     print(error!.localizedDescription) 
    } 
    } 
} 

deleteUserView在我的情況對來自用戶的按鈕調用自來水deleteUser()。您也可以使用UIAlertController來代替自定義UIView,但這取決於您。

希望這會有所幫助。

相關問題