我正在使用python-firebase library by Ozgur Vatansever作为我的程序。
我以前能够写入/读取数据到我的firebase,但是随着身份验证的引入我不能。使用:
from firebase import firebase
auth = firebase.FirebaseAuthentication('MY_FIREBASE_SECRET','myEmail@email.com')
myFirebase = firebase.FirebaseApplication('https://MYFIREBASE.firebaseio.com', auth)
result = myFirebase.get('/users', None)
print result
导致:
HTTPError: 400 Client Error: Bad Request
相反,不使用身份验证:
myFirebase = firebase.FirebaseApplication('https://MYFIREBASE.firebaseio.com', None)
result = myFirebase.get('/users', None)
按预期工作。
。非常感谢您在使用身份验证时获得此HTTP error: 400
原因的任何帮助。
答案 0 :(得分:1)
我使用的是1.2版的库和python 2.7
在here中,有一个关于如何使用auth轻松连接的示例。
import datetime
from firebase.firebase import FirebaseApplication, FirebaseAuthentication
if __name__ == '__main__':
SECRET = '12345678901234567890'
DSN = 'https://firebase.localhost'
EMAIL = 'your@email.com'
authentication = FirebaseAuthentication(SECRET,EMAIL, True, True)
firebase = FirebaseApplication(DSN, authentication)
firebase.get('/users', None,
params={'print': 'pretty'},
headers={'X_FANCY_HEADER': 'very fancy'})
data = {'name': 'Ozgur Vatansever', 'age': 26,
'created_at': datetime.datetime.now()}
snapshot = firebase.post('/users', data)
print(snapshot['name'])
def callback_get(response):
with open('/dev/null', 'w') as f:
f.write(response)
firebase.get_async('/users', snapshot['name'], callback=callback_get)
答案 1 :(得分:0)
我发现了同样的问题,问题似乎是Firebase拒绝了python-firebase构建的令牌(在FirebaseTokenGenerator中)。
我不知道生成的令牌有什么问题,并且鉴于我很乐意使用Firebase Dashboard的Secrets部分中提供的JWT令牌,这个hack适用于我:
在firebase.py类FirebaseAuthentication中,在get_user方法的开头,添加一个if子句:
def get_user(self):
if self.extra.get('explicitAuth') is None:
token = self.authenticator.create_token(self.extra)
else:
token = self.extra.get('explicitAuth')
然后,在调用应用程序时,提供覆盖生成的显式标记的显式标记:
auth = firebase.FirebaseAuthentication('Ignore', 'Ignore', extra={'explicitAuth': myToken})
app = firebase.FirebaseApplication('https://mystuff.firebaseio.com/', auth)
答案 2 :(得分:0)
也许您应该查看文档Custom Authentication
您正在使用的库需要python-firebase来生成令牌。 在您的代码中,
auth = firebase.FirebaseAuthentication('MY_FIREBASE_SECRET','myEmail@email.com')
它应该是:
auth = firebase.FirebaseAuthentication('MY_FIREBASE_SECRET','myEmail@email.com', extra={'uid': '123'})
param extra
是创建令牌的有效负载,而uid
是github页面所必须的。
答案 3 :(得分:0)
查看文件firebase.py
,课程FirebaseApplication
函数_authenticate
:
在'auth'
'auth_token'
替换为params.update({'auth_token': user.firebase_auth_token})
修正了此HTTPError: 400 Client Error: Bad Request
错误,但未解决所有身份验证问题......
答案 4 :(得分:0)
让我们试试这个,转到规则标签并设置为真
{
"rules": {
".read": "true",
".write": "true"
}
}
代码 来自firebase import firebase
myFirebase = firebase.FirebaseApplication('https://MYFIREBASE.firebaseio.com', None)
result = myFirebase.get('/users', None)
print result