app端密钥登录
This commit is contained in:
parent
ed30c84cdc
commit
ed68baca62
|
@ -23,3 +23,8 @@ class PwResetSerializer(serializers.Serializer):
|
||||||
phone = serializers.CharField(label="手机号")
|
phone = serializers.CharField(label="手机号")
|
||||||
code = serializers.CharField(label="验证码")
|
code = serializers.CharField(label="验证码")
|
||||||
password = serializers.CharField(label="新密码")
|
password = serializers.CharField(label="新密码")
|
||||||
|
|
||||||
|
|
||||||
|
class SecretLoginSerializer(serializers.Serializer):
|
||||||
|
username = serializers.CharField(label="用户名")
|
||||||
|
secret = serializers.CharField(label="密钥")
|
|
@ -3,7 +3,7 @@ from django.urls import path
|
||||||
from rest_framework_simplejwt.views import (TokenObtainPairView,
|
from rest_framework_simplejwt.views import (TokenObtainPairView,
|
||||||
TokenRefreshView)
|
TokenRefreshView)
|
||||||
|
|
||||||
from apps.auth1.views import CodeLogin, LoginView, LogoutView, PwResetView, SendCode, TokenBlackView, WxLogin, WxmpLogin
|
from apps.auth1.views import CodeLogin, LoginView, LogoutView, PwResetView, SecretLogin, SendCode, TokenBlackView, WxLogin, WxmpLogin
|
||||||
|
|
||||||
API_BASE_URL = 'api/auth/'
|
API_BASE_URL = 'api/auth/'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -11,6 +11,7 @@ urlpatterns = [
|
||||||
path(API_BASE_URL + 'token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
|
path(API_BASE_URL + 'token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
|
||||||
path(API_BASE_URL + 'token/black/', TokenBlackView.as_view(), name='token_black'),
|
path(API_BASE_URL + 'token/black/', TokenBlackView.as_view(), name='token_black'),
|
||||||
path(API_BASE_URL + 'login/', LoginView.as_view(), name='session_login'),
|
path(API_BASE_URL + 'login/', LoginView.as_view(), name='session_login'),
|
||||||
|
path(API_BASE_URL + 'login_secret/', SecretLogin.as_view(), name='secret_login'),
|
||||||
path(API_BASE_URL + 'login_wxmp/', WxmpLogin.as_view(), name='login_wxmp'),
|
path(API_BASE_URL + 'login_wxmp/', WxmpLogin.as_view(), name='login_wxmp'),
|
||||||
path(API_BASE_URL + 'login_wx/', WxLogin.as_view(), name='login_wx'),
|
path(API_BASE_URL + 'login_wx/', WxLogin.as_view(), name='login_wx'),
|
||||||
path(API_BASE_URL + 'login_sms_code/', CodeLogin.as_view(), name='login_sms_code'),
|
path(API_BASE_URL + 'login_sms_code/', CodeLogin.as_view(), name='login_sms_code'),
|
||||||
|
|
|
@ -19,9 +19,10 @@ from apps.utils.tools import rannum
|
||||||
from apps.utils.wxmp import wxmpClient
|
from apps.utils.wxmp import wxmpClient
|
||||||
from apps.utils.wx import wxClient
|
from apps.utils.wx import wxClient
|
||||||
from django.contrib.auth.hashers import make_password
|
from django.contrib.auth.hashers import make_password
|
||||||
|
from django.db.models import Q
|
||||||
|
|
||||||
|
|
||||||
from apps.auth1.serializers import CodeLoginSerializer, LoginSerializer, PwResetSerializer, SendCodeSerializer, WxCodeSerializer
|
from apps.auth1.serializers import CodeLoginSerializer, LoginSerializer, PwResetSerializer, SecretLoginSerializer, SendCodeSerializer, WxCodeSerializer
|
||||||
from apps.system.models import User
|
from apps.system.models import User
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||||
|
|
||||||
|
@ -176,6 +177,26 @@ class CodeLogin(CreateAPIView):
|
||||||
raise ParseError('账户不存在或已禁用')
|
raise ParseError('账户不存在或已禁用')
|
||||||
|
|
||||||
|
|
||||||
|
class SecretLogin(CreateAPIView):
|
||||||
|
"""App端密钥登录
|
||||||
|
|
||||||
|
App端密钥登录
|
||||||
|
"""
|
||||||
|
authentication_classes = []
|
||||||
|
permission_classes = []
|
||||||
|
serializer_class = SecretLoginSerializer
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
username = request.data['username']
|
||||||
|
secret = request.data['secret']
|
||||||
|
user = User.objects.filter(Q(username=username) | Q(phone=username) | Q(
|
||||||
|
employee__id_number=username)).filter(secret=secret).first()
|
||||||
|
if user:
|
||||||
|
ret = get_tokens_for_user(user)
|
||||||
|
return Response(ret)
|
||||||
|
raise ParseError('登录失败')
|
||||||
|
|
||||||
|
|
||||||
class PwResetView(CreateAPIView):
|
class PwResetView(CreateAPIView):
|
||||||
"""重置密码
|
"""重置密码
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2022-08-04 09:06
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0005_alter_userpost_post'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='user',
|
||||||
|
name='secret',
|
||||||
|
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='密钥'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -135,6 +135,7 @@ class User(AbstractUser, CommonBModel):
|
||||||
roles = models.ManyToManyField(Role, verbose_name='关联角色')
|
roles = models.ManyToManyField(Role, verbose_name='关联角色')
|
||||||
|
|
||||||
# 关联账号
|
# 关联账号
|
||||||
|
secret = models.CharField('密钥', max_length=100, null=True, blank=True)
|
||||||
wx_openid = models.CharField('微信公众号OpenId', max_length=100, null=True, blank=True)
|
wx_openid = models.CharField('微信公众号OpenId', max_length=100, null=True, blank=True)
|
||||||
wx_nickname = models.CharField('微信昵称', max_length=100, null=True, blank=True)
|
wx_nickname = models.CharField('微信昵称', max_length=100, null=True, blank=True)
|
||||||
wx_headimg = models.CharField('微信头像', max_length=100, null=True, blank=True)
|
wx_headimg = models.CharField('微信头像', max_length=100, null=True, blank=True)
|
||||||
|
|
|
@ -302,7 +302,7 @@ class UserListSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
exclude = ['password']
|
exclude = ['password', 'secret']
|
||||||
|
|
||||||
# def phone_check(phone):
|
# def phone_check(phone):
|
||||||
# re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$'
|
# re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$'
|
||||||
|
|
|
@ -262,6 +262,7 @@ class DictViewSet(CustomModelViewSet):
|
||||||
update_serializer_class = DictCreateUpdateSerializer
|
update_serializer_class = DictCreateUpdateSerializer
|
||||||
partial_update_serializer_class = DictCreateUpdateSerializer
|
partial_update_serializer_class = DictCreateUpdateSerializer
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
|
ordering = ['sort', 'create_time']
|
||||||
|
|
||||||
|
|
||||||
class PostViewSet(CustomModelViewSet):
|
class PostViewSet(CustomModelViewSet):
|
||||||
|
@ -512,6 +513,19 @@ class UserViewSet(CustomModelViewSet):
|
||||||
user.save()
|
user.save()
|
||||||
return Response({'wx_openid': openid})
|
return Response({'wx_openid': openid})
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
|
def bind_secret(self, request, pk=None):
|
||||||
|
"""创建密钥
|
||||||
|
|
||||||
|
创建密钥
|
||||||
|
"""
|
||||||
|
secret = request.data['secret']
|
||||||
|
if secret:
|
||||||
|
user = request.user
|
||||||
|
user.secret = secret
|
||||||
|
user.save()
|
||||||
|
return Response()
|
||||||
|
|
||||||
|
|
||||||
class FileViewSet(CustomCreateModelMixin, RetrieveModelMixin, ListModelMixin, CustomGenericViewSet):
|
class FileViewSet(CustomCreateModelMixin, RetrieveModelMixin, ListModelMixin, CustomGenericViewSet):
|
||||||
"""文件上传
|
"""文件上传
|
||||||
|
|
Loading…
Reference in New Issue