Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase Permission Denied with Pyrebase library

Tags:

firebase

I have setup a Firebase account and a database.

I have copied the config with the API key into my Python code.

I still get a 401 Permission denied error on Python 3.5

import pyrebase
config = {
"apiKey": "*****",
"authDomain": "***-bot.firebaseapp.com",
"databaseURL": "https://***-bot.firebaseio.com",
"storageBucket": "ebo-bot.appspot.com"
}

firebase = pyrebase.initialize_app(config)
db = firebase.database()
data = {"name": "Mortimer 'Morty' Smith"}
db.child("users").child("Morty").set(data)

My database rules are set to:

{
 "rules": {
".read": "auth != null",
".write": "auth != null"
}
}
like image 682
skunkwerk Avatar asked Dec 11 '16 01:12

skunkwerk


2 Answers

I ran into this same issue trying to upload data to the database. I reread the beginning of: https://github.com/thisbejim/Pyrebase/blob/master/README.md

import pyrebase

config = {
  "apiKey": "apiKey",
  "authDomain": "projectId.firebaseapp.com",
  "databaseURL": "https://databaseName.firebaseio.com",
  "storageBucket": "projectId.appspot.com",
  "serviceAccount": "path/to/serviceAccountCredentials.json"
}

firebase = pyrebase.initialize_app(config)

Add the serviceAccount entry into the configuration with a path to a key that you can download from Firebase.

enter image description here

To get there: Settings > Project Settings > Service Accounts > Generate New Private Key.

Put that key in some desired location and put that location in the "serviceAccount" path.

Hope it helps.

like image 65
importnumpyasnp Avatar answered Oct 16 '22 05:10

importnumpyasnp


set method is missing the user['idToken'], and you forgot to authenticate, try:

import pyrebase
config = {
"apiKey": "*****",
"authDomain": "***-bot.firebaseapp.com",
"databaseURL": "https://***-bot.firebaseio.com",
"storageBucket": "ebo-bot.appspot.com"
}

firebase = pyrebase.initialize_app(config)
db = firebase.database()
auth = firebase.auth()

user = auth.sign_in_with_email_and_password("[email protected]", "passwordhere")

data = {"name": "Mortimer 'Morty' Smith"}
db.child("users").child("Morty").set(data,user['idToken'])

(you also need to create an user before running this, go to your firebase dashboard and click on the authentication tab, you can add users there)

like image 25
José Roberto Canuto Vasconcelo Avatar answered Oct 16 '22 06:10

José Roberto Canuto Vasconcelo