Reputation: 3070
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"
}
}
Upvotes: 5
Views: 9139
Reputation: 105
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)
Upvotes: 2
Reputation: 262
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.
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.
Upvotes: 13