Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Firebase身份验证_Python_Firebase - Fatal编程技术网

Python Firebase身份验证

Python Firebase身份验证,python,firebase,Python,Firebase,所以我试图从Firebase获取一些数据,当然Firebase定义了一些规则/安全约束。我可以通过登录和身份验证选项卡对我的用户进行身份验证,我想从firebase获取数据,但是我的用户仍然没有经过身份验证 user=ref.authenticate(电子邮件、密码),为user { u'token':{some long token here}', u'user':{ u'uid':u'ef44b781-8842-4f28-abf0-2ac9aa0b2bea',

所以我试图从Firebase获取一些数据,当然Firebase定义了一些规则/安全约束。我可以通过登录和身份验证选项卡对我的用户进行身份验证,我想从firebase获取数据,但是我的用户仍然没有经过身份验证

user=ref.authenticate(电子邮件、密码)
,为
user

{
   u'token':{some long token here}',
   u'user':{
      u'uid':u'ef44b781-8842-4f28-abf0-2ac9aa0b2bea',
      u'provider':u'password',
      u'email':u'user@email.com',
      u'isTemporaryPassword':False,
      u'sessionKey':u'{session key here}}',
      u'md5_hash':u'{md5_hash here}}',
      u'id':u'ef44b781-8842-4f28-abf0-2ac9aa0b2bea'
   }
}
现在我知道用户已经过身份验证(否则它会返回一些类似于错误的内容),我想做一个简单的GET
conversations=firebase.GET(firebase\u NAME+'/conversations/'+me)
,其中“me”是
用户['user']['uid']

对于
对话
,我有以下结构:

conversations/my-uid/other-uid/{data}

我认为我的用户是经过身份验证的,但它仍然返回一个PermissionDenied

编辑 通过使用您可以找到的其他库解决了此问题。我使用的初始库不支持身份验证,而此库支持身份验证。解决此问题的方法是实现另一个库中的某些函数,并发送我的令牌,如下所示:
FIREBASE.child('/messages/').get(token=token)

通过使用您可以找到的其他库解决了此问题。我使用的初始库不支持身份验证,而此库支持身份验证。解决此问题的方法是从另一个库实现一些函数,并按如下方式进行身份验证:

def auth_with_password(self, email, password):
    request_ref = 'https://auth.firebase.com/auth/firebase?firebase={0}&email={1}&password={2}'.\
        format(self.fire_base_name, email, password)
    request_object = self.requests.get(request_ref)
    return request_object.json()
然后,要拨打授权电话,请执行以下操作

user = auth_with_password(email, password)
token = user['user']['token']
FIREBASE.child('/messages/').get(token=token)

请确保您的令牌正确无误。库支持此操作,但我建议您使用

您不应在URL中发送密码,您可以这样做:

如果成功,其结果如下:

如果失败(密码错误等):

或者可能是


我首先尝试设置
“。阅读”:auth!=null
位于安全规则的顶层。如果读取成功,则您知道问题是由您的规则引起的。如果读取仍然失败,则您的用户显然没有经过身份验证。请注意,在这一原因中,了解您访问Firebase时使用的库将有助于了解。这似乎是中的库存在问题Dect.我从不同的库中实现了一些功能,这些功能确实支持经过身份验证的requestsGood to Hearn。您可以通过任何方式将这些功能写入您使用的库的答案中(最初的库不起作用,新的库也起作用)这样别人将来可能会从你的经历中受益。编辑了最初的帖子:-)谢谢你。最好提供与答案相同的信息。这样你就可以接受你自己的答案,所以系统会认为它已经解决了。哇!URL中的普通密码?!
__FIREBASE_USER_VERIFY_SERVICE = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword"
__FIREBASE_API_KEY = __your_api_key_here__

def user_login(email, passwd):
    url = "%s?key=%s" % (__FIREBASE_USER_VERIFY_SERVICE, __FIREBASE_API_KEY)
    data = {"email": email,
            "password": passwd,
            "returnSecureToken": True}
    result = requests.post(url, json=data)
    is_login_successful = result.ok
    json_result = result.json()
    return json_result    # authToken=> json_result['idToken']
{
    "displayName": "",
    "email": "your_users_email@example.com",
    "expiresIn": "3600",
    "idToken": "abc123...",
    "kind": "identitytoolkit#VerifyPasswordResponse",
    "localId": "UWQ...x2",
    "refreshToken": "def098...",
    "registered": true
}
{
  "error": {
    "code": 400,
    "errors": [
      {
        "domain": "global",
        "message": "INVALID_PASSWORD",
        "reason": "invalid"
      }
    ],
    "message": "INVALID_PASSWORD"
  }
}
{
  "error": {
    "code": 400,
    "errors": [
      {
        "domain": "global",
        "message": "MISSING_PASSWORD",
        "reason": "invalid"
      }
    ],
    "message": "MISSING_PASSWORD"
  }
}