[英]HTTP Error 400: Bad request to Firebase using Python
我正在使用Ozgur Vatansever开发的python-firebase库 。
我以前能够向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
任何帮助,将不胜感激。
我正在使用库的1.2版本和python 2.7
在这里有一个示例,说明如何使用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)
我发现了同样的问题,问题似乎出在Firebase拒绝了python-firebase构建的令牌(在FirebaseTokenGenerator中)。
我不知道所生成的令牌有什么问题,并且鉴于我很乐意使用Firebase信息中心“机密信息”部分中提供的JWT令牌,因此该黑客适用于我:
在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)
也许您应该看看docs 自定义身份验证
您正在使用的库使用python-firebase生成令牌。 在您的代码中
auth = firebase.FirebaseAuthentication('MY_FIREBASE_SECRET','myEmail@email.com')
它应该是:
auth = firebase.FirebaseAuthentication('MY_FIREBASE_SECRET','myEmail@email.com', extra={'uid': '123'})
extra
的参数是创建令牌的有效载荷,而uid
是必须的,如github页面所说。
看文件firebase.py
,类FirebaseApplication
功能_authenticate
:
在params.update({'auth_token': user.firebase_auth_token})
'auth'
替换为'auth_token'
修复了此HTTPError: 400 Client Error: Bad Request
错误,但没有解决所有身份验证问题...
让我们尝试一下,转到“规则”标签并设置为true
{
"rules": {
".read": "true",
".write": "true"
}
}
从Firebase导入Firebase的代码
myFirebase = firebase.FirebaseApplication('https://MYFIREBASE.firebaseio.com', None)
result = myFirebase.get('/users', None)
print result
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.