【问题标题】:Cloud Firestore Authentication iOSCloud Firestore 身份验证 iOS
【发布时间】:2018-11-19 12:18:41
【问题描述】:

我是 iOS 开发的新手(边走边学),我正在使用 Cloud Firestore 通过电子邮件/密码对用户进行身份验证。我正在尝试进行简单的电子邮件和密码身份验证。我使用了文档中的 db 规则之一,我认为我不必在规则中创建集合和文档。我已经测试了我与数据库的连接,所以这也不是问题。我到目前为止的代码如下:

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)
                    }
            })
        }
    }



}

但我得到了错误:

  • 无法使用类型为“([String : Any], completion: ((Error?) -> Void)?)”的参数列表调用“setData”

有什么我没有做的吗?有人可以帮助进行此电子邮件/密码身份验证吗?

【问题讨论】:

    标签: ios swift firebase-authentication google-cloud-firestore


    【解决方案1】:

    首先检查变量是如何正确命名的。在swift中我们使用camelCase。

    第二次您尝试将您的 textField 对象分配给您在字典中的密码。

    第三,您尝试打印并在登录操作之外执行 segue。 考虑编辑你的代码:

      @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)
            }
        }
    }
    

    【讨论】:

    • 谢谢,项目现在可以构建,但它不会登录用户。它识别点击(给出“登录按钮点击”消息)但实际上并没有登录用户并进入下一个segue。有什么原因吗?
    • 尝试使用db 代替docRef
    • 我采取了不同的方法,但不确定上述错误。我将用户引用更改为 authResult,然后出现此错误。知道如何解决它吗? @DionizB
    猜你喜欢
    • 2020-10-16
    • 2018-05-02
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2021-05-29
    • 2019-06-17
    相关资源
    最近更新 更多