自定义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”。此后端设置为仍然分配用户名,但如果有任何问题,请提出这些问题和/或发出请求以帮助社区!