База данных Firebase Realtime не сохраняет данные со страницы регистрации - PullRequest
0 голосов
/ 12 октября 2018

Я работаю на странице регистрации приложения в Swift.Часть аутентификации в Firebase работает хорошо, но база данных не сохраняет никакой информации, которую я запрашиваю.Может кто-нибудь помочь?

Мой код:

Auth.auth().createUser(withEmail: userEmail,password: userPassword, completion: {(User, error) in
    if error != nil {
        print(error as Any)
        return
    }
    guard let uid = User?.user.uid else {return}
    let ref = Database.database().reference(fromURL:"Database-URL")
    let userReference = ref.child("users").child(uid)

    let values = ["Firstname": userFirstName,"email": userEmail]
    userReference.updateChildValues(values, withCompletionBlock: { (error, reference) in
        if error != nil {
            print(error as Any)
            return
        }
    })
})

Консоль печатает ошибка

Необязательно (Ошибка домена = com.firebaseКод = 1 «Отказано в доступе» UserInfo = {NSLocalizedDescription = Отказано в доступе})

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

По умолчанию база данных в проекте в новой консоли Firebase доступна только для чтения / записи только аутентифицированным пользователям:

{
  "rules": {
     ".read": "auth != null",
     ".write": "auth != null"
   }
 }

См. Краткий обзор правил безопасности базы данных Firebase.

Посколькувы не входите в систему из своего кода, база данных запрещает вам доступ к данным.Чтобы решить эту проблему, вам нужно либо разрешить неаутентифицированный доступ к вашей базе данных, либо войти в систему перед доступом к базе данных.

Разрешить неаутентифицированный доступ к вашей базе данных Самый простой обходной путь на данный момент (до тех пор, пока руководство не будет обновлено)это перейти на панель «База данных» в консоли для вашего проекта, выбрать вкладку «Правила» и заменить содержимое следующими правилами:

{
  "rules": {
    ".read": true,
    ".write": true
    }
}

Это сделает вашу новую базу данных доступной для чтения и записи для всех.Обязательно защитите базу данных еще раз, прежде чем приступить к работе, иначе кто-то может начать злоупотреблять ею.

0 голосов
/ 12 октября 2018

Я, возможно, не уверен, но завершение для createUser не дает вам User и error, а скорее AuthResult и Error.Таким образом, вы должны получить пользователя от результата, как показано ниже

Auth.auth().createUser(withEmail: email, password: password) { (authData, error) in
        if let error = error {
            debugPrint("FIREBASE ERROR : \(error.localizedDescription)")
        } else {
            if let authData = authData {
                let user = authData.user //here get the user from result
                self.saveToDB(user: user) . //save the user to database
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...