手机号登录
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 django.urls import path,include
|
||||||
from .views import CompanyViewSet, \
|
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
|
from rest_framework import routers
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -14,6 +14,7 @@ router.register('msg', MsgViewSet, basename="msg")
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('consumer/mplogin/', ConsumerMPLoginView.as_view()),
|
path('consumer/mplogin/', ConsumerMPLoginView.as_view()),
|
||||||
path('consumer/register/', ConsumerRegister.as_view()),
|
path('consumer/register/', ConsumerRegister.as_view()),
|
||||||
|
path('consumer/wxphoneregister/', WxphoneRegister.as_view()),
|
||||||
path('change_remain_count/', change_remain_count.as_view()),
|
path('change_remain_count/', change_remain_count.as_view()),
|
||||||
path('candidate/img/',candidate),
|
path('candidate/img/',candidate),
|
||||||
path('', include(router.urls)),
|
path('', include(router.urls)),
|
||||||
|
|
|
||||||
|
|
@ -643,6 +643,22 @@ class ConsumerRegister(APIView):
|
||||||
else:
|
else:
|
||||||
return Response({'error':'信息不全!'})
|
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):
|
class change_remain_count(APIView):
|
||||||
perms_map=[{'*':'change_remain_count'}]
|
perms_map=[{'*':'change_remain_count'}]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue