手机号登录

This commit is contained in:
caoqianming 2022-02-13 22:15:35 +08:00
parent 2f6e6efdb7
commit 54b88fdc8e
3 changed files with 50 additions and 1 deletions

View File

@ -0,0 +1,32 @@
import base64
import json
from Crypto.Cipher import AES
from rest_framework.exceptions import APIException
import logging
logger = logging.getLogger('log')
class WXBizDataCrypt:
def __init__(self, appId, sessionKey):
self.appId = appId
self.sessionKey = sessionKey
def decrypt(self, encryptedData, iv):
# base64 decode
try:
sessionKey = base64.b64decode(self.sessionKey)
encryptedData = base64.b64decode(encryptedData)
iv = base64.b64decode(iv)
cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
if decrypted['watermark']['appid'] != self.appId:
raise Exception('Invalid Buffer')
return decrypted
except:
logger.error('腾讯sb-{}-{}-{}'.format(self.sessionKey,encryptedData, iv))
raise APIException('获取手机号失败,请稍后重试')
def _unpad(self, s):
return s[:-ord(s[len(s)-1:])]

View File

@ -1,6 +1,6 @@
from django.urls import path,include
from .views import CompanyViewSet, \
ConsumerViewSet, ConsumerMPLoginView, ConsumerRegister, MsgViewSet, change_remain_count, ConsumerPermViewSet, ConsumerRoleViewSet, candidate, CandidateViewSet
ConsumerViewSet, ConsumerMPLoginView, ConsumerRegister, MsgViewSet, WxphoneRegister, change_remain_count, ConsumerPermViewSet, ConsumerRoleViewSet, candidate, CandidateViewSet
from rest_framework import routers
@ -14,6 +14,7 @@ router.register('msg', MsgViewSet, basename="msg")
urlpatterns = [
path('consumer/mplogin/', ConsumerMPLoginView.as_view()),
path('consumer/register/', ConsumerRegister.as_view()),
path('consumer/wxphoneregister/', WxphoneRegister.as_view()),
path('change_remain_count/', change_remain_count.as_view()),
path('candidate/img/',candidate),
path('', include(router.urls)),

View File

@ -643,6 +643,22 @@ class ConsumerRegister(APIView):
else:
return Response({'error':'信息不全!'})
from .WXBizDataCrypt import WXBizDataCrypt
class WxphoneRegister(APIView):
"""
微信手机号注册
"""
def post(self, request, *args, **kwargs):
data = request.data
pc = WXBizDataCrypt(appid, data['sessionKey'])
wxdata = pc.decrypt(data['encryptedData'], data['iv'])
request.user.username = wxdata['phoneNumber']
if request.user.role.name =='游客':
request.user.role = ConsumerRole.objects.get(name='注册用户')
if not request.user.workscope:
request.user.workscope = WorkScope.objects.all().first()
request.user.save()
return Response(status=status.HTTP_200_OK)
class change_remain_count(APIView):
perms_map=[{'*':'change_remain_count'}]