Отказано в доступе к базе данных Firebase с использованием Pyrebase - PullRequest
0 голосов
/ 17 марта 2019

Мне удалось зарегистрировать пользователя и правильно зарегистрировать его вскоре после того, как они зарегистрировались в одних и тех же запросах. Также в моем запросе я пытаюсь сохранить информацию о пользователе в базе данных Firebase, используя пакет Python Pyrebase.

Я правильно инициализировал свое приложение Firebase, а также свою базу данных Firebase в своем приложении фляги

config = {
    "apiKey": "apikey",
    "authDomain": "proj.firebaseapp.com",
    "databaseURL": "https://proj.firebaseio.com",
    "storageBucket": "proj.appspot.com",
    "messagingSenderId": "930158028418",
    "serviceAccount.json": "path/to/theServiceAccountStuff.json"
}

app = Flask(__name__)
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
firedb = firebase.database()

Я создаю этот словарь

userInfo = {"email": email, "password": password, "stripeID": customer.id, "subscriptionID": subID,"subscription": "active", "startdate": "Today bro"}

И передача его в мою функцию set, которая должна (или, по крайней мере, я так думал) сохранить мой объект JSON в базе данных Firebase.

firedb.child("users").child(user['localId']).set(data=userInfo)

Я пытаюсь сохранить пользователей в разделе «пользователи», а затем классифицировать их всех с помощью специального ключа, который является их localId.

По какой-то причине каждый раз, когда я нажимаю на строку кода выше, я получаю сообщение об ошибке

requests.exceptions.HTTPError: [Errno 401 Client Error: Unauthorized for url: https://myproj.firebaseio.com/users/someid.json] {
  "error" : "Permission denied"
}

Это мои правила базы данных в firebase

enter image description here

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

1 Ответ

1 голос
/ 17 марта 2019

Вы пытаетесь использовать Pyrebase для записи в базу данных Firebase Realtime, но вместо этого база данных вашего проекта настроена на использование Cloud Firestore.

Эти базы данных не совпадают.

Если вы используете Python в размещенной службе, рассмотрите возможность перехода на Firebase Admin SDK для Python . Поскольку вы используете учетную запись службы, это будет путь. Это также позволит вам сделать выбор между Cloud Firestore и базой данных реального времени .

Если вы используете Python на клиентском устройстве, даже если это локальный веб-сервер, вам не следует использовать служебную учетную запись из соображений безопасности и вместо этого выбрать аутентификацию на стороне клиента. Если вы хотите использовать Pyrebase , на момент написания вам нужно будет переключить базу данных вашего проекта на использование базы данных реального времени, используя раскрывающийся список рядом со словом «База данных» на скриншоте. Это связано с тем, что Cloud Firestore в настоящее время не имеет REST API , который Pyrebase использует в качестве своего бэкэнда. Для получения дополнительной информации см. Документацию Базы данных реального времени Firebase .

...