自定义drf身份验证后端。

drf-firebase-auth-cavoke的Python项目详细描述


drf firebase auth(从drf-firebase-auth by garyburgman分叉)

要求

  • Python(用2.7、3.6测试)
  • Django
  • django rest框架

安装

$ pip install drf-firebase-auth-cavoke

将应用程序添加到项目的INSTALLED_APPS中的settings.py

INSTALLED_APPS = [
    ...
    'drf_firebase_auth_cavoke',
]

在项目的settings.py中,将其添加到REST_FRAMEWORK配置中注意,如果您想为本地创建的用户保留对可浏览api的访问权,那么您可能也希望保留rest_framework.authentication.SessionAuthentication

REST_FRAMEWORK = {
  ...
  'DEFAULT_AUTHENTICATION_CLASSES': [
    ...
    'rest_framework.authentication.SessionAuthentication',
    'drf_firebase_auth_cavoke.authentication.FirebaseAuthentication',
  ]
}

drf_firebase_auth_cavoke应用程序带有以下默认设置,可以在项目的settings.py文件中覆盖这些设置。确保将它们嵌套在drf_firebase_auth_cavoke中,如下所示:

drf_firebase_auth_cavoke = {
    # path to JSON file with firebase secrets
    'FIREBASE_SERVICE_ACCOUNT_KEY': '',
    # allow creation of new local user in db
    'FIREBASE_CREATE_LOCAL_USER': True,
    # attempt to split firebase user.display_name and set local user
    # first_name and last_name
    'FIREBASE_ATTEMPT_CREATE_WITH_DISPLAY_NAME': True,
    # commonly JWT or Bearer (e.g. JWT <token>)
    'FIREBASE_AUTH_HEADER_PREFIX': 'JWT',
    # verify that JWT has not been revoked
    'FIREBASE_CHECK_JWT_REVOKED': True,
    # require that firebase user.email_verified is True
    'FIREBASE_AUTH_EMAIL_VERIFICATION': False
}

除了FIREBASE_SERVICE_ACCOUNT_KEY之外,您可以将所有设置保留为默认设置,这显然是必需的。至少,您需要在项目的settings.py中设置此值这必须是从应用程序的firebase控制台接收的json服务帐户密钥。

...
drf_firebase_auth_cavoke = {
    'FIREBASE_SERVICE_ACCOUNT_KEY': 'project/config/firebase.json'
}

现在您已经配置了应用程序,运行迁移以便可以存储firebase数据。

$ ./manage.py migrate drf_firebase_auth_cavoke

现在您需要做的就是让您的客户机代码处理firebase弹出式/重定向身份验证流,从当前用户检索idtoken(firebase在他们的文档中很好地解释了这个流:https://firebase.google.com/docs/auth/admin/verify-id-tokens),然后在对api的请求中的Authorization头中为用户使用idtoken。

JWT <token>

贡献

  • 如果您使用上面未列出的python版本测试此代码,并且一切正常,请分叉并更新自述文件以包含您使用的python版本:)
  • 我几乎总是使用从Abstractuser继承的自定义用户类来设置django,在这里我将username_字段切换为“email”。此后端设置为仍然分配用户名,但如果有任何问题,请提出这些问题和/或发出请求以帮助社区!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将Java中的对象列表序列化为json   在同一Play Framework项目中同时使用Ebean和JPA的java   oop如何在整个Java项目中共享API密钥   java ADT Eclipse SDK故障未找到DDM   扫描程序中变量的递归Java输入值未应用于方法中的变量   java将空格转换为命令行类型的空格   JavaSpring,如何决定客户机应该使用哪个服务?   java致命异常:main(Android标准)   java编译错误是因为类型检查还是三元运算符?   java Sikuli+Webdriver:getting error x.png看起来像一个文件,但在磁盘上找不到。假设是文本   java选择位置。。。。ms sql 2005中需要电气状态   由于OSGi捆绑包依赖性问题,java无法启动RCP应用程序   json java gson fromjson返回非泛型的null   如何将google api访问令牌从java服务器传递到gapi javascript客户端?   java在已排序的LinkedList中添加元素   java ForkJoinPool为什么程序抛出OutOfMemoryError?   java SQUARE无法解析为Processing/Eclipse中的变量   java如何为Sun App Server 8.2设置JNDI