HTTP错误400:使用Python向Firebase发出错误请求

时间:2015-02-25 23:14:19

标签: python firebase firebase-security

我正在使用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原因的任何帮助。

5 个答案:

答案 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)

This is a test app so there's no issue with the secret And here is the proof of the data being uploaded 希望这有帮助!

答案 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