手机号登录
This commit is contained in:
parent
2f6e6efdb7
commit
54b88fdc8e
|
|
@ -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:])]
|
||||
|
|
@ -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)),
|
||||
|
|
|
|||
|
|
@ -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'}]
|
||||
|
|
|
|||
Loading…
Reference in New Issue