django rest框架的扩展,提供授权服务
drf-auth-service的Python项目详细描述
Django Rest框架授权服务
概述:锁定:
身份验证服务协调多个应用程序之间的单点登录(SSO)。 如果用户已登录到一个应用程序,则不会再次显示登录页面,用户将通过此服务登录。在
Single sign-on(SSO)是一种身份验证方案,允许用户使用 几个相关但独立的软件系统的单一ID和密码。在
特点:zap:
- [十] 按不同的注册类型注册和登录:电子邮件、电话号码、电话号码、密码和昵称
- [十] 使用RegisterBackend管理的确认流进行注册
- [十] 使用多个选项重置密码phone/email由注册用户管理
- [十] Facebook
>社交网站> - [十] Service登录和注册的模型方法
- [十] 用户edit/block/unblock/set password/resend confirmation/delete基于秘密令牌的功能
- [十] 可定制
集成工作流
登记确认
登录
恢复密码
刷新过期访问令牌
安装
使用pip
安装。。。在
pip install drf-auth-service
将'drf_auth_service'
添加到INSTALLED_APPS
设置中。在
将包URL添加到应用程序urls.py
文件中。在
urlpatterns = [
path("", include("drf_auth_service.urls"))
]
在项目开始之前运行数据库的迁移。。。在
./manage.py migrate
配置
DRF Auth服务的配置都是在一个名为DRF_Auth_Service的Django设置中使用名称空间的。在
例如你的项目设置.py文件可能包含以下内容:
DRF_AUTH_SERVICE = {
'WORK_MODE': 'standalone',
'REGISTER_TYPES': [],
'SEND_CONFIRMATION': True
}
可用设置:mag_右:
Key | Description | Default |
---|---|---|
^{ | Mode of service | ^{ |
^{ | Available register types | ^{ |
^{ | Boolean if you want to send confirmation on register | ^{ |
^{ | Common domain address used in Single Sign On authentication | ^{ |
^{ | Token expiration hours for reset password and confirmation token | ^{ |
^{ | Base url where is append token | ^{ |
^{ | Base url where is append token | ^{ |
^{ | Sms message on confirmation | ^{ |
^{ | Sms message on reset password | ^{ |
^{ | From address in sending emails | EMAIL_USERNAME value |
^{ | Subject on reset password email | ^{ |
^{ | Subject on confirmation email | ^{ |
^{ | Path to reset password template if no one is defined, default is used | internal template |
^{ | Path to confirmation template if no one is defined, default is used | internal template |
^{ | Template ID for reset password from sendinblue service | ^{ |
^{ | Template ID for confirmation from sendinblue service | ^{ |
^{ | SendInBlue API_KEY | ^{ |
^{ | Template ID for reset password from Mailchimp service | ^{ |
^{ | Template ID for confirmation from Mailchimp service | ^{ |
^{ | Mailchimp Username | ^{ |
^{ | Mailchimp SECRET_KEY | ^{ |
^{ | Twilio SID | ^{ |
^{ | Twilio TOKEN | ^{ |
^{ | Twilio from phone number | ^{ |
^{ | Email SMTP host | Django EMAIL_HOST value |
^{ | Email SMTP port | Django EMAIL_HOST value |
^{ | Email SMTP username | Django EMAIL_HOST_USER value |
^{ | Email SMTP password | Django EMAIL_HOST_PASSWORD value |
^{ | Email SMTP TLS use | Django EMAIL_USE_TLS value |
^{ | Here is a Dict of serializers that you can override | |
^{ | Here is a Dict of views that you can override | |
^{ | Here is a Dict of permissions that you can override | |
^{ | Here is a Dict of backends that you can override | |
^{ | Here is a Dict of enums that you can override |
定制
更改用户模型:系列:
用户模型是基于Django模型的可交换设置和配置您自己的模型的
您只需将模型提供给AUTH_USER_MODEL = 'my_application.CustomUser'
fromdrf_auth_service.modelsimportAbstractSSOUser# Add phone number to user tableclassCustomUser(AbstractSSOUser):phone_number=models.CharField(max_length=120)
创建新的注册后端:包:
如果你想使用你自己的后端,你必须重写
fromdrf_auth_service.common.backendsimportBaseBackendfromdrf_auth_service.common.managersimportPhoneManagerclassCustomRegisterBackend(BaseBackend):name='email'manager=PhoneManager# This method will be called on registerdefregister_user(self):user=get_user_model().objects.create(service=self.request.service,register_type=self.name,username=self.request.data['username'],# insert with new field valuephone_number=self.request.data['phone_number'])# return created userreturnuser
为了使用RegisterBacked必须从sso包继承BaseBackend:
- 名称:register_type name,基于在register body中接收到的这个名称,将标识要使用的注册后端
- 经理:如果您有此功能,使用什么管理器(PhoneManager/EmailManager)发送确认
注册后端更改设置.py公司名称:
DRF_AUTH_SERVICE={'BACKENDS':{'REGISTER_BACKENDS':['my_application.backends.CustomRegisterBackend']}}
创建新的SMS后端:信封:
目前我们只有TwilioBackend,使用
fromdrf_auth_service.common.sms_backendsimportTwilioBackendclassCustomPhoneProvider(TwilioBackend):defsend(self,to_phone,message,from_phone=None):response=requests.post('http://anothersmsprovider.com/send',data={to_phone_number=f"+{to_phone}",from_phone_number=from_phone,body=message})ifnotresponse.is_ok:raiseValidationError(dict(details=response.json()))
在中更改SMS后端设置.py公司名称:
DRF_AUTH_SERVICE={'BACKENDS':{'SMS_BACKEND':['my_application.backends.CustomPhoneProvider']}}
更改电子邮件后端:邮箱已关闭:
我们有3个电子邮件后端选项(MailchimpBackend/SendInBlueBackend/HtmlTemplateBackend) 使用默认的HtmlTemplateBackend,要更改或添加新的后端,只需添加到sso设置
DRF_AUTH_SERVICE={'BACKENDS':{'EMAIL_BACKEND':['drf_auth_service.common.email_backends.SendInBlueBackend']}}
更改视图/序列化程序/权限
每个视图/序列化程序/权限都可以从包设置更改,这是一个很好的示例:
- 创建新序列化程序
classRegisterSerializer(serializers.Serializer):phone_number=serializers.CharField(required=True)username=serializers.EmailField(required=True)register_type=serializers.HiddenField(default=RegisterType.EMAIL)defvalidate(self,attrs):user_exists=get_user_model().objects.filter(username=attrs['username'],service=self.context['request'].service).exists()ifuser_exists:raiseValidationError({'username':f"User '{attrs['username']}' already exists"})returnattrs
- 在中更改序列化程序设置.py公司名称:
DRF_AUTH_SERVICE={'SERIALIZERS':{'REGISTER_SERIALIZER':"apps.authentication.serializers.RegisterSerializer"}}
- 项目
标签: