HTTP错误400:使用Python对Firebase的请求不正确
我正在为我的程序使用 我以前能够向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
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
,classFirebaseApplication
函数验证
在参数更新({'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机密用于授予用户令牌,但不直接使用,这可能不太安全。