簡體   English   中英

HTTP錯誤400:使用Python對Firebase的錯誤請求

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM