|
@@ -15,6 +15,7 @@ import datetime
|
|
|
import traceback
|
|
|
import time
|
|
|
import simplejson as json
|
|
|
+import requests
|
|
|
from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
|
|
|
from django.db.models import Q
|
|
|
from django.http import HttpResponseRedirect
|
|
@@ -1373,3 +1374,138 @@ class verifyAuthcode(TemplateView):
|
|
|
if authcode != resetCode:
|
|
|
return response.json(121)
|
|
|
return response.json(0)
|
|
|
+
|
|
|
+
|
|
|
+# 获取验证码
|
|
|
+class wxAuthSignView(TemplateView):
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ lang = request.POST.get('lang', None)
|
|
|
+ response = ResponseObject(lang)
|
|
|
+ request_dict = request.POST
|
|
|
+ return self.ValidationError(request_dict, response)
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ # Device_User.objects.filter(userEmail='chanjunkai@163.com').delete()
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ lang = request.GET.get('lang', None)
|
|
|
+ response = ResponseObject(lang)
|
|
|
+ request_dict = request.GET
|
|
|
+ # return self.do_register('157113010663213800138000', '157113010663213800138000', response, 'xx')
|
|
|
+
|
|
|
+ return self.ValidationError(request_dict, response)
|
|
|
+
|
|
|
+ def ValidationError(self, request_dict, response):
|
|
|
+ grant_code = request_dict.get('grant_code', None) # 微信授权code
|
|
|
+ appBundleID = request_dict.get('appBundleID', None) # 包名
|
|
|
+ if all([grant_code, appBundleID]):
|
|
|
+ app_config = {
|
|
|
+ 'com.ansjer.zccloud': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
|
|
|
+ # ios
|
|
|
+ 'com.ansjer.zccloud_ab': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
|
|
|
+ # android
|
|
|
+ }
|
|
|
+ if appBundleID in app_config.keys():
|
|
|
+ appid = app_config[appBundleID]['appid']
|
|
|
+ secret = app_config[appBundleID]['secret']
|
|
|
+ # 获取access_token请求
|
|
|
+ at_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code'.format(
|
|
|
+ appid=appid, secret=secret, code=grant_code)
|
|
|
+ res_req = requests.get(url=at_url)
|
|
|
+ res_json = res_req.json()
|
|
|
+ print(res_json)
|
|
|
+ if 'access_token' not in res_json.keys():
|
|
|
+ # 授权过期
|
|
|
+ return response.json(717)
|
|
|
+ access_token = res_json['access_token']
|
|
|
+ openid = res_json['openid']
|
|
|
+ if access_token and openid:
|
|
|
+ user_extend_qs = UserExtendModel.objects.filter(authOpenID=openid,authType=1)
|
|
|
+ if user_extend_qs.exists():
|
|
|
+ # 如果用户绑定过则直接登录
|
|
|
+ userID = user_extend_qs[0].userID
|
|
|
+ user_qs = Device_User.objects.filter(userID=userID)
|
|
|
+ from var_dump import var_dump
|
|
|
+ var_dump('lgggin')
|
|
|
+ return self.do_login(user_qs, response)
|
|
|
+ else:
|
|
|
+ # 如果用户为绑定过则创建用户并进行登录返回token
|
|
|
+ info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}'.format(
|
|
|
+ access_token=access_token, openid=openid)
|
|
|
+ res_req = requests.get(url=info_url)
|
|
|
+ res_json = res_req.json()
|
|
|
+ print(res_json)
|
|
|
+ userID = CommonService.getUserID(getUser=False)
|
|
|
+ nickname = res_json['nickname'] + '_' + CommonService.RandomStr(4)
|
|
|
+ return self.do_register(userID, nickname, response, appBundleID, openid)
|
|
|
+ else:
|
|
|
+ return response.json(414, 'access_token,openid')
|
|
|
+ else:
|
|
|
+ return response.json(414, 'appBundleID is wrong!')
|
|
|
+ else:
|
|
|
+ return response.json(414)
|
|
|
+ # if wxcode
|
|
|
+
|
|
|
+ # 登录
|
|
|
+ def do_login(self, user_qs, response):
|
|
|
+ now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
|
|
|
+ user_qs.update(last_login=now_time, online=True)
|
|
|
+ userID = user_qs[0].userID
|
|
|
+ print('userID' + userID)
|
|
|
+ tko = TokenObject()
|
|
|
+ user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
|
|
|
+ res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
|
|
|
+ # 增加角色
|
|
|
+ user_qs[0].role.add(Role.objects.get(rid=1))
|
|
|
+ role_dict = ModelService.own_role(userID=userID)
|
|
|
+ res['rid'] = role_dict['rid']
|
|
|
+ res['roleName'] = role_dict['roleName']
|
|
|
+ res['permList'] = ModelService.own_permission(userID)
|
|
|
+ res['userID'] = userID
|
|
|
+ # 昵称,邮箱,电话,刷新,头像
|
|
|
+ userIconPath = str(user_list[0]["userIconPath"])
|
|
|
+ if userIconPath and userIconPath.find('static/') != -1:
|
|
|
+ userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
|
|
|
+ res['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
|
|
|
+ else:
|
|
|
+ res['userIconUrl'] = ''
|
|
|
+ res['NickName'] = user_list[0]["NickName"] if user_list[0]["NickName"] is not None else ''
|
|
|
+ res['username'] = user_list[0]["username"] if user_list[0]["username"] is not None else ''
|
|
|
+ res['userEmail'] = user_list[0]["userEmail"] if user_list[0]["userEmail"] is not None else ''
|
|
|
+ res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
|
|
|
+ print(res)
|
|
|
+ return response.json(0, res)
|
|
|
+
|
|
|
+ def do_register(self, userID, nickname, response, appBundleId, openid):
|
|
|
+ data_valid = DataValid()
|
|
|
+ if data_valid.name_validate(userID) is not True:
|
|
|
+ return response.json(105)
|
|
|
+ try:
|
|
|
+ users = Device_User.objects.create(
|
|
|
+ username=userID,
|
|
|
+ NickName=nickname,
|
|
|
+ password=make_password('123456'),
|
|
|
+ userID=userID,
|
|
|
+ is_active=True,
|
|
|
+ user_isValid=True,
|
|
|
+ )
|
|
|
+
|
|
|
+ nowTime = int(time.time())
|
|
|
+ UserExtendModel.objects.create(
|
|
|
+ addTime=nowTime,
|
|
|
+ updTime=nowTime,
|
|
|
+ appBundleId=appBundleId,
|
|
|
+ userID_id=users.userID,
|
|
|
+ authType=1,
|
|
|
+ authOpenID=openid
|
|
|
+ )
|
|
|
+ except Exception as e:
|
|
|
+ errorInfo = traceback.format_exc()
|
|
|
+ print(errorInfo)
|
|
|
+ return response.json(424, repr(e))
|
|
|
+ else:
|
|
|
+ user_qs = Device_User.objects.filter(Q(userID=userID))
|
|
|
+ print('---')
|
|
|
+ print(user_qs)
|
|
|
+ return self.do_login(user_qs, response)
|