Аутентификация облачного пожарного хранилища iOS - PullRequest
0 голосов
/ 19 ноября 2018

Я очень новичок в разработке для iOS (учусь по ходу дела) и использую Cloud Firestore для аутентификации пользователей по электронной почте / паролю.Я пытаюсь сделать простую аутентификацию по электронной почте и паролю.Я использовал одно из правил БД из документации, и я не думаю, что мне нужно создавать коллекции и документы в правилах.Я уже проверил свое соединение с БД, так что это тоже не проблема.Пока у меня есть код ниже:

import UIKit
import Firebase


class SignUpViewController: UIViewController {

    //Outlets
    @IBOutlet weak var firstNameText: UITextField!
    @IBOutlet weak var lastNameText: UITextField!
    @IBOutlet weak var emailText: UITextField!
    @IBOutlet weak var passwordText: UITextField!
    @IBOutlet weak var signUpButton: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func signUpButtonTapped(_ sender: Any) {
        guard let firstName = firstNameText.text,
        let lastName = lastNameText.text,
        let email = emailText.text,
        let password = passwordText.text else { return }

        Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in
            if let error = error {
                debugPrint("Error creating user: \(error.localizedDescription)")
            }
            let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
            changeRequest?.displayName = firstName
            changeRequest?.commitChanges(completion: { (error) in
                if let error = error {
                    debugPrint(error.localizedDescription)
                }
        })
            guard let userId = authResult?.user else { return }
            Firestore.firestore().collection(USERS_REF).document(userId).setData([
                USERNAME : firstName,
                DATE_CREATED : FieldValue.serverTimestamp()
                ], completion: { (error) in

                    if let error = error {
                        debugPrint(error.localizedDescription)
                    } else {
                        self.dismiss(animated: true, completion: nil)
                    }
            })
        }
    }



}

Но я получаю ошибку:

  • Невозможно вызвать 'setData' со списком аргументов типа '([String: Any], завершение: ((Ошибка?) -> Void)?) '

Что-то я не делаю?Может ли кто-нибудь помочь с этой аутентификацией по электронной почте / паролю?

1 Ответ

0 голосов
/ 19 ноября 2018

Сначала проверьте, как правильно названы переменные.В Swift мы используем CamelCase.

Во-вторых, вы попытались назначить объект textField своему паролю внутри словаря.

В-третьих, вы попытались распечатать и выполнить поиск вне действия входа в систему.Попробуйте отредактировать ваш код:

  @IBAction func SMLoginTapped(_ sender: Any) {
     print("Login button tapped!")
     guard let emailText = EmailTextField.text, !emailText.isEmpty else { return }
     guard let passwordText = PasswordTextField.text, !passwordText.isEmpty else { return }
     let saveData: [String: Any] = ["email": emailText, "password": passwordText]
     docRef.setData(saveData) { (error) in
        if let error = error {
            print("Oh no! Got an error: \(error.localizedDescription)")
        } else {
            print("Data has been saved to Firestore!")
            self.performSegue(withIdentifier: "SecondViewSegue", sender: self)
        }
    }
}
...