HTTP错误400:使用Python对Firebase的请求不正确

HTTP错误400:使用Python对Firebase的请求不正确,python,firebase,firebase-security,Python,Firebase,Firebase Security,我正在为我的程序使用 我以前能够向firebase写入/读取数据,但由于引入了身份验证,我无法这样做。使用: from firebase import firebase auth = firebase.FirebaseAuthentication('MY_FIREBASE_SECRET','myEmail@email.com') myFirebase = firebase.FirebaseApplication('https://MYFIREBASE.firebaseio.com', aut

我正在为我的程序使用

我以前能够向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错误:400
的任何帮助。

我发现了同样的问题,问题似乎是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)

也许你应该看看这些文件

您正在使用的库用于生成令牌。 在代码中

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页面所说是必须的。

查看文件
firebase.py
,class
FirebaseApplication
函数
验证

参数更新({'auth\u-token':user.firebase\u-auth\u-token})中将
'auth'
替换为
'auth\u-token'


修复此
HTTPError:400客户端错误:错误请求
错误,但不修复所有身份验证问题…

让我们尝试一下,转到“规则”选项卡并设置为真

{
  "rules": {
    ".read": "true",
    ".write": "true"
  }
}
代码 从firebase导入firebase

myFirebase = firebase.FirebaseApplication('https://MYFIREBASE.firebaseio.com', None)

result = myFirebase.get('/users', None) 
print result

我正在使用库的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)

希望这有帮助

我对Python一无所知,但看看,它的语法是
f=Firebase('http://SampleChat.firebaseIO.com/“,auth_token=”“)
@Kato感谢您的回复。不幸的是,这是另一个使用较少的python firebase库。他们实际上有相同的名字!编辑问题以反映我正在使用的特定库。嗨,Eric。这就把事情弄清楚了一点。因此,我只在JWT令牌无效时看到400/Bad请求。如果您能够弄清楚如何记录JWT令牌,您就可以查看它是否实际上已损坏。我的猜测是,这将是a)SSL兼容性问题(因为SSL V3最近已被删除)或b)Firebase令牌解析中的更改,导致此库不兼容。您好,MikeH。看看这些文件。您正在使用Firebase机密,这将授予服务器对整个Firebase的完全读写访问权限。在我看来,firebase机密用于授予用户令牌,但不直接使用,这可能不太安全。