一个固执己见的django应用程序,提供用户身份验证。
cklauth的Python项目详细描述
ckl rest auth
一个固执己见的django应用程序,提供用户身份验证。
安装
pip install cklauth
- 添加到项目的
INSTALLED_APPS
:
rest_framework
rest_framework.authtoken
corsheaders
cklauth
- 包括项目的
ckl-rest-auth
URL: 在urls.py
上添加path('', include('cklauth.urls'))
- 根据项目要求添加设置
- 对于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_FIELD
是email
,然后需要使用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