[英]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.