Повторите аутентификацию и удалите пользователя с помощью ссылки электронной почты. - PullRequest
0 голосов
/ 05 апреля 2020

Я борюсь с проблемой повторной аутентификации пользователя с помощью ссылки на электронную почту firebase. Я не могу удалить учетную запись пользователя.

Процесс выглядит следующим образом:

  1. Пользователь создает учетную запись путем добавления адреса электронной почты
  2. Ссылка успешно отправлена ​​на электронную почту
  3. Работает универсальная ссылка
  4. Аутентификация нажатием на ссылку работает
  5. Учетная запись пользователя создается в Firebase
  6. Сохранение этой ссылки на UserDefaults работает
  7. Удаление учетной записи при повторной аутентификации пользователь не работает ...

выдает ошибку:

enter image description here

Это код для удаления учетной записи пользователя :

func deleteAccount() {

    // Create progres HUD
    let hud = JGProgressHUD(style: .dark)
    hud.textLabel.text = NSLocalizedString("Deleting Account", comment: "")
    hud.show(in: self.view)

    // #1 Create firebase credential to re-authenticate user
    let currentUser = Auth.auth().currentUser
    guard let email = Auth.auth().currentUser?.email else {return}
    let link = UserDefaults.standard.string(forKey: "Link")
    let credential = EmailAuthProvider.credential(withEmail: email, link: link!)

    // #2 Re-authenticate user
    currentUser?.reauthenticate(with: credential, completion: { (result, error) in

    // #3 if there is no error, remove user from database
    if error == nil {
        currentUser?.delete(completion: { (error) in
        guard let userID = currentUser?.uid else {return }
        let ref = Database.database().reference()
        ref.child("User").child(userID).removeValue()

        if error == nil{
            hud.dismiss()
            self.delegate?.deletePinAnnotation(email: email)
            self.navigationController?.popViewController(animated: true)
        } else {
            print(error.debugDescription)
        }
    } else {  // #4 If error when re-authenticate user occurs 
         print(error.debugDescription)         
    }                        
    hud.dismiss()                        
}

1 Ответ

0 голосов
/ 05 апреля 2020

Оказалось, что я не должен использовать ту же ссылку, что и при создании аккаунта. Во время повторной аутентификации я должен отправить другую ссылку.

, используя тот же метод:

Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { (error) in
      // ...
      if let error = error {
      self.createAlert(withDescription: error.localizedDescription)
      print(error)
      return
     }
   // The link was successfully sent. Inform the user.
   // Save the email locally so you don't need to ask the user for it again
   // if they open the link on the same device.
      UserDefaults.standard.set(email, forKey: "Email")
      self.createAlert(withDescription: "Open email to check the link")
   // ...
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...