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基于秘密令牌的功能
  • [十] 可定制

集成工作流

登记确认

Register

登录

Register

恢复密码

Register

刷新过期访问令牌

Register

安装

使用pip安装。。。在

pip install drf-auth-service

'drf_auth_service'添加到INSTALLED_APPS设置中。在

^{pr2}$

将包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_右:

KeyDescriptionDefault
^{}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 emailsEMAIL_USERNAME value
^{}Subject on reset password email^{}
^{}Subject on confirmation email^{}
^{}Path to reset password template if no one is defined, default is usedinternal template
^{}Path to confirmation template if no one is defined, default is usedinternal 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 hostDjango EMAIL_HOST value
^{}Email SMTP portDjango EMAIL_HOST value
^{}Email SMTP usernameDjango EMAIL_HOST_USER value
^{}Email SMTP passwordDjango EMAIL_HOST_PASSWORD value
^{}Email SMTP TLS useDjango 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']}}

更改视图/序列化程序/权限

每个视图/序列化程序/权限都可以从包设置更改,这是一个很好的示例:

  1. 创建新序列化程序
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
  1. 在中更改序列化程序设置.py公司名称:
DRF_AUTH_SERVICE={'SERIALIZERS':{'REGISTER_SERIALIZER':"apps.authentication.serializers.RegisterSerializer"}}

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

推荐PyPI第三方库


热门话题
JFrame中的Java多线程   java Servlet异常映射   java无法从输出流读取   swing Java带来的小程序GUI问题   java什么原因导致错误“'void'类型此处不允许”以及如何修复它?   Java选择器select(长)与selectNow的区别   java自定义arraylist<mygames>获得不同   java Icepdf注释让页面消失   java反向整数数组   java I在生成同步“无法解析配置的所有依赖项”时遇到此错误:app:debugRuntimeClasspath   多个虚拟机上的java线程访问单个DB实例上的表,有时会导致性能低下和异常   swing更改Java中的默认按钮,使其看起来“更好”   java慢速MQ主题订阅。并行化不能提高性能   java运行Boggle Solver需要一个多小时。我的代码怎么了?   数据库中的java循环与应用程序中的java循环   正则表达式匹配${123…456}并在Java中提取2个数字?   java如何制作我们软件的试用版   Java内存参数计算   从另一个类调用方法时出现java问题