Firebase电子邮件和密码身份验证Python

时间:2018-01-22 16:22:46

标签: python firebase authentication

我想在我的python程序中使用firebase数据库并将某些信息限制为某些用户。我已经弄清楚如何设置规则但是想在我的程序中实现身份验证部分。我已导入:

from firebase import firebase

我有一个用户:test.user@gmail.com pass:password123

我怎样才能发出验证此用户确实可以发帖的帖子请求?

2 个答案:

答案 0 :(得分:0)

您可以使用DoSomething<MyOtherType>(obj); 创建自定义Security Rules并验证用户权限。

检查此tutorial以获取更多信息

答案 1 :(得分:0)

我的解决方案是首先创建一个以用户名(包含声明)为键的firestore“集合”。然后,您可以修饰您的受限方法,以要求有效的idToken以及声明中的任意条件:

import firebase_admin
import firebase_fave


# wrapper function to require credentials and claims!
def require_creds(creds_reqs={}):

    def real_require_creds(protected_function):

        @wraps(protected_function)
        def protector(*args, **kwargs):
            token = request.args.get('idToken', '')
            try:
                auth_resp = firebase_admin.auth.verify_id_token(token, check_revoked=True)
                claims = firebase_admin.firestore.client().collection('user_claims')\
                    .document(auth_resp['user_id']).get().to_dict()
            except:
                abort(401)

            if 'exp' in auth_resp\
                    and auth_resp['exp'] > time.time()\
                    and min(*[bool(creds_reqs[k](v)) for k, v in claims.items()]):
                return protected_function(*args, **kwargs)
            else:
                abort(401)

        return protector

    return real_require_creds

用法:

@require_creds(
    {'access_flag': lambda x: x & 8, 'release_lag', lambda x: time.time() > RELEASE_TIME + x}
  )
def your_post_method(self, ...

另请参阅我在pypi上的猴子补丁,该补丁向firebase_admin添加了verify_user方法: https://pypi.org/project/firebase_fave/