一个固执己见的django应用程序,提供用户身份验证。

cklauth的Python项目详细描述


ckl rest auth

一个固执己见的django应用程序,提供用户身份验证。

安装

  1. pip install cklauth
  2. 添加到项目的INSTALLED_APPS
  • rest_framework
  • rest_framework.authtoken
  • corsheaders
  • cklauth
  1. 包括项目的ckl-rest-authURL: 在urls.py上添加path('', include('cklauth.urls'))
  2. 根据项目要求添加设置
  • 对于django的默认用户配置:
# Field used for authencation together with password (required)'LOGIN_FIELD':'email',# Fields used on user serializer'REGISTER_FIELDS':('username','email'),# From email used on password reset emails (optional)'FROM_EMAIL':'default@email.com',# Google authentication settings (optional)'GOOGLE':{'CLIENT_ID':'insert-your-key','CLIENT_SECRET':'insert-your-key','REDIRECT_URI':'insert-your-uri',},# Facebook authentication settings (optional)'FACEBOOK':{'CLIENT_ID':'insert-your-key','CLIENT_SECRET':'insert-your-key','REDIRECT_URI':'insert-your-uri',},

注意,默认的LOGIN_FIELDemail,然后需要使用helper 身份验证后端:

AUTHENTICATION_BACKENDS=['cklauth.auth.EmailOrUsernameModelBackend']
  • 对于自定义用户模型,可以定义其他选项:
CKL_REST_AUTH={# Field used for authencation together with password (required)'LOGIN_FIELD':'email',# Override the default serializer used on registration and authentication responses (optional)'USER_SERIALIZER':'cklauth.api.v1.serializers.UserSerializer',# Fields used on user serializer (not used if USER_SERIALIZER is defined above)'REGISTER_FIELDS':('username','email'),# From email used on password reset emails (optional)'FROM_EMAIL':'default@email.com',# Google authentication settings (optional)'GOOGLE':{'CLIENT_ID':'insert-your-key','CLIENT_SECRET':'insert-your-key','REDIRECT_URI':'insert-your-uri',# Define a callable that receives the social user payload and returns the value on of the# User model USERNAME_FIELD (username, for instance). The default function already checks# if the value is in use. Set it to `None`, if you don't want to generate a USERNAME_FIELD.'AUTH_FIELD_GENERATOR':'cklauth.utils.auth_field_generator',# How to map the social user payload to the User model fields. It accepts a callable that# receives the whole social user payload to map more complex data.'USER_INFO_MAPPING':{'full_name':'full_name':lambdainfo:'{}{}'.format(info.get('given_name'),info.get('family_name')),'email':'email',},},# Facebook authentication settings (optional)'FACEBOOK':{'CLIENT_ID':'insert-your-key','CLIENT_SECRET':'insert-your-key','REDIRECT_URI':'insert-your-uri','AUTH_FIELD_GENERATOR':'cklauth.utils.auth_field_generator','USER_INFO_MAPPING':{'full_name':'full_name':lambdainfo:'{}{}'.format(info.get('first_name'),info.get('last_name')),'email':'email',},},}

基本端点

POST /api/v1/login
正文(取决于登录字段)

{"email":"example@example.com","password":"secret"}

响应(取决于寄存器字段和用户序列化程序)-200确定

{"token":"supersecret","user":{"id":1,"email":"example@example.com","first_name":"Example","last_name":"Example"}}

注意:用户负载可能因指定的register字段和用户序列化程序而异。

POST /api/v1/register
body(取决于register_字段和user_serializer--始终有密码)

{"email":"example@example.com","password":"secret","first_name":"Example","last_name":"Example"}

响应(取决于寄存器字段和用户序列化程序)-201已创建

{"token":"supersecret","user":{"id":1,"email":"example@example.com","first_name":"Example","last_name":"Example"}}

注意:用户负载可能因指定的register字段和用户序列化程序而异。

POST /api/v1/password-reset/
车身

{"email":"example@example.com"}

响应-200正常

{"email":"example@example.com"}

注意:它总是返回成功,即使提供的电子邮件没有注册。

社交终点

GET /api/v1/social/google
GET /api/v1/social/facebook
注意:这不应该是xhr请求,用户将被重定向到同意屏幕。之后 同意,用户被重定向到设置上添加的平台重定向uri,其中代码是 从url散列提取。

POST /api/v1/social/google
POST /api/v1/social/facebook
车身

{"code":"<code from previous step>","user_extra_fields":{"role":"admin"}}

注意:您可以在user_extra_fields键中传递其他用户字段,只要它们是 主要列表的一部分。

响应-200正常

{"token":"supersecret","user":{"id":1,"email":"example@example.com","first_name":"Example","last_name":"Example"}}

注意:用户负载可能因指定的register字段和用户序列化程序而异。

贡献

库代码位于cklauth文件夹下,测试位于testapp下的测试项目中。 文件夹。

运行测试:

  • 确保已安装应用程序要求
pip install -r requirements.txt
pip install -e cklauth
  • 运行测试
python -m pytest test_default_user
python -m pytest test_custom_user

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

推荐PyPI第三方库


热门话题
java为什么在ng构建之后使用404?   java Maven原型“quickstart”无法扩展其POM   java Arduino端口卡在满功率状态   java如何确保在参数化构造函数失败时不调用默认构造函数?   java检测Blackberry中的切换失败   java如何将安卓库(作为Angle)链接到Eclipse项目?   java压缩图片,但获取“未知压缩方法”   java无法对应该初始化的模拟实例进行测试   将现有eclipse项目导出到war文件时,java“模块名无效”   java如何防止AppletClassLoader在查找类/其他资源时击中服务器?   java正则表达式根据分隔组的分隔符的数量获取n个组   java在JLayeredPane后面与JPanel交互   Java中的xml Soap请求   webView中的java utf8代码页