|
@@ -15,6 +15,7 @@ from Model.models import Role
|
|
import traceback, datetime
|
|
import traceback, datetime
|
|
|
|
|
|
import simplejson as json
|
|
import simplejson as json
|
|
|
|
+from django.contrib import auth
|
|
from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
|
|
from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
|
|
from django.http import HttpResponseRedirect
|
|
from django.http import HttpResponseRedirect
|
|
from django.utils.decorators import method_decorator
|
|
from django.utils.decorators import method_decorator
|
|
@@ -946,3 +947,107 @@ class v2resetPwdByCodeView(TemplateView):
|
|
res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
|
|
res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
|
|
print(res)
|
|
print(res)
|
|
return response.json(0, res)
|
|
return response.json(0, res)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# 登录
|
|
|
|
+class v2LoginView(TemplateView):
|
|
|
|
+ @method_decorator(csrf_exempt) # @csrf_exempt
|
|
|
|
+ def dispatch(self, *args, **kwargs):
|
|
|
|
+ return super(v2LoginView, self).dispatch(*args, **kwargs)
|
|
|
|
+
|
|
|
|
+ @ratelimit(key='ip', rate='5/m')
|
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
|
+ request.encoding = 'utf-8'
|
|
|
|
+ request_dict = request.POST
|
|
|
|
+ language = request_dict.get('language', 'en')
|
|
|
|
+ response = ResponseObject(language)
|
|
|
|
+ was_limited = getattr(request, 'limited', False)
|
|
|
|
+ if was_limited is True:
|
|
|
|
+ return response.json(5)
|
|
|
|
+ return self.validates(request_dict, response)
|
|
|
|
+
|
|
|
|
+ @ratelimit(key='ip', rate='5/m')
|
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
|
+ request.encoding = 'utf-8'
|
|
|
|
+ request_dict = request.GET
|
|
|
|
+ language = request_dict.get('language', 'en')
|
|
|
|
+ response = ResponseObject(language)
|
|
|
|
+ was_limited = getattr(request, 'limited', False)
|
|
|
|
+ if was_limited is True:
|
|
|
|
+ return response.json(5)
|
|
|
|
+ return self.validates(request_dict, response)
|
|
|
|
+
|
|
|
|
+ def validates(self, request_dict, response):
|
|
|
|
+ username = request_dict.get('userName', None)
|
|
|
|
+ password = request_dict.get('userPwd', None)
|
|
|
|
+ # mcode = request_dict.get('mobileMechanicalCode', '')
|
|
|
|
+ if username is not None and password is not None:
|
|
|
|
+ username = username.strip()
|
|
|
|
+ password = password.strip()
|
|
|
|
+ data_valid = DataValid()
|
|
|
|
+ if data_valid.email_validate(username):
|
|
|
|
+ return self.do_email_login(username, password, response)
|
|
|
|
+ elif data_valid.mobile_validate(username):
|
|
|
|
+ return self.do_phone_login(username, password, response)
|
|
|
|
+ elif data_valid.name_validate(username):
|
|
|
|
+ return self.do_name_login(username, password, response)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(107)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(111)
|
|
|
|
+
|
|
|
|
+ def do_email_login(self, email, password, response):
|
|
|
|
+ user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
|
|
|
|
+ if not user_qs.exists():
|
|
|
|
+ return response.json(104)
|
|
|
|
+ if not user_qs[0].user_isValid or not user_qs[0].is_active:
|
|
|
|
+ return response.json(110)
|
|
|
|
+ return self.valid_login(user_qs, password, response)
|
|
|
|
+
|
|
|
|
+ def do_phone_login(self, phone, password, response):
|
|
|
|
+ user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone))
|
|
|
|
+ if not user_qs.exists():
|
|
|
|
+ return response.json(104)
|
|
|
|
+ if not user_qs[0].user_isValid or not user_qs[0].is_active:
|
|
|
|
+ return response.json(110)
|
|
|
|
+ return self.valid_login(user_qs, password, response)
|
|
|
|
+
|
|
|
|
+ def do_name_login(self, username, password, response):
|
|
|
|
+ user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username))
|
|
|
|
+ if not user_qs.exists():
|
|
|
|
+ return response.json(104)
|
|
|
|
+ if not user_qs[0].user_isValid or not user_qs[0].is_active:
|
|
|
|
+ return response.json(110)
|
|
|
|
+ return self.valid_login(user_qs, password, response)
|
|
|
|
+
|
|
|
|
+ def valid_login(self, user_qs, password, response):
|
|
|
|
+ if not check_password(password, user_qs[0].password):
|
|
|
|
+ return response.json(111)
|
|
|
|
+ userID = user_qs[0].userID
|
|
|
|
+ print('userID' + userID)
|
|
|
|
+ tko = TokenObject()
|
|
|
|
+ res = tko.generate(data={'userID': userID, 'lang': response.lang})
|
|
|
|
+ if tko.code == 0:
|
|
|
|
+ now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
|
|
|
|
+ user_qs.update(last_login=now_time, online=True, language=response.lang)
|
|
|
|
+ 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
|
|
|
|
+ # 昵称,邮箱,电话,刷新,头像
|
|
|
|
+ user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
|
|
|
|
+ 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)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(tko.code)
|