|
@@ -13,8 +13,9 @@
|
|
|
"""
|
|
|
import datetime
|
|
|
import traceback
|
|
|
-
|
|
|
import simplejson as json
|
|
|
+import socket
|
|
|
+import uuid
|
|
|
from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
|
|
|
from django.db.models import Q
|
|
|
from django.http import HttpResponseRedirect
|
|
@@ -1023,6 +1024,13 @@ class v2LoginView(TemplateView):
|
|
|
language = request_dict.get('language', 'en')
|
|
|
response = ResponseObject(language)
|
|
|
was_limited = getattr(request, 'limited', False)
|
|
|
+ x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
|
|
+ if x_forwarded_for:
|
|
|
+ ip = x_forwarded_for.split(',')[0] # 所以这里是真实的ip
|
|
|
+ else:
|
|
|
+ ip = request.META.get('REMOTE_ADDR') # 这里获得代理ip
|
|
|
+ print ('访问者的ip:')
|
|
|
+ print (ip)
|
|
|
if was_limited is True:
|
|
|
return response.json(5)
|
|
|
return self.validates(request_dict, response)
|
|
@@ -1041,46 +1049,50 @@ class v2LoginView(TemplateView):
|
|
|
def validates(self, request_dict, response):
|
|
|
username = request_dict.get('userName', None)
|
|
|
password = request_dict.get('userPwd', None)
|
|
|
+ # 标志ios登录还是安卓登录标记
|
|
|
+ phone_code = request_dict.get('phone_code', None)
|
|
|
+ if not phone_code:
|
|
|
+ phone_code = ''
|
|
|
if not username or not password:
|
|
|
return response.json(111)
|
|
|
username = username.strip()
|
|
|
password = password.strip()
|
|
|
data_valid = DataValid()
|
|
|
if data_valid.email_validate(username):
|
|
|
- return self.do_email_login(username, password, response)
|
|
|
+ return self.do_email_login(phone_code,username, password, response)
|
|
|
elif data_valid.mobile_validate(username):
|
|
|
- return self.do_phone_login(username, password, response)
|
|
|
+ return self.do_phone_login(phone_code,username, password, response)
|
|
|
elif data_valid.name_validate(username):
|
|
|
- return self.do_name_login(username, password, response)
|
|
|
+ return self.do_name_login(phone_code,username, password, response)
|
|
|
else:
|
|
|
return response.json(107)
|
|
|
|
|
|
- def do_email_login(self, email, password, response):
|
|
|
+ def do_email_login(self, phone_code,email, password, response):
|
|
|
user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
|
|
|
- return self.valid_login(user_qs, password, response)
|
|
|
+ return self.valid_login(phone_code,user_qs, password, response)
|
|
|
|
|
|
- def do_phone_login(self, phone, password, response):
|
|
|
+ def do_phone_login(self, phone_code,phone, password, response):
|
|
|
user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone), is_active=True, user_isValid=True)
|
|
|
- return self.valid_login(user_qs, password, response)
|
|
|
+ return self.valid_login(phone_code,user_qs, password, response)
|
|
|
|
|
|
- def do_name_login(self, username, password, response):
|
|
|
+ def do_name_login(self,phone_code, username, password, response):
|
|
|
user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username),
|
|
|
is_active=True, user_isValid=True)
|
|
|
- return self.valid_login(user_qs, password, response)
|
|
|
+ return self.valid_login(phone_code,user_qs, password, response)
|
|
|
|
|
|
- def valid_login(self, user_qs, password, response):
|
|
|
+ def valid_login(self,phone_code, user_qs, password, response):
|
|
|
if not user_qs.exists():
|
|
|
return response.json(104)
|
|
|
users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
|
|
|
- 'phone', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
|
|
|
+ 'phone','machine_code', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
|
|
|
if not check_password(password, users['password']):
|
|
|
return response.json(111)
|
|
|
userID = users['userID']
|
|
|
tko = TokenObject()
|
|
|
- res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': users['username']})
|
|
|
+ res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': users['username'], 'machine_code': phone_code})
|
|
|
if tko.code == 0:
|
|
|
now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
|
|
|
- user_qs.update(last_login=now_time, language=response.lang)
|
|
|
+ user_qs.update(last_login=now_time, language=response.lang, machine_code=phone_code )
|
|
|
res['rid'] = users['role__rid']
|
|
|
res['roleName'] = users['role__roleName']
|
|
|
res['permList'] = ModelService.own_permission(userID)
|
|
@@ -1096,6 +1108,33 @@ class v2LoginView(TemplateView):
|
|
|
res['username'] = users['username'] if users['username'] is not None else ''
|
|
|
res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
|
|
|
res['phone'] = users['phone'] if users['phone'] is not None else ''
|
|
|
+ reds = RedisObject()
|
|
|
+ print (res['access_token'])
|
|
|
+ if phone_code == users['machine_code'] :
|
|
|
+ res['machine_code'] = '本机登录'
|
|
|
+ else:
|
|
|
+ res['machine_code'] = '别地登录被挤出!'
|
|
|
+ if not reds.set_data(key=res['userID']+'_tokenValues', val=res['access_token'], expire=300): #1个小时
|
|
|
+ return response.json(10, '生成缓存错误')
|
|
|
+ # if not reds.del_data(res['userID']):
|
|
|
+ # return response.json(10, '删除缓存失败')
|
|
|
+
|
|
|
+ # 获取主机名
|
|
|
+ hostname = socket.gethostname()
|
|
|
+ # 获取IP
|
|
|
+ ip = socket.gethostbyname(hostname)
|
|
|
+
|
|
|
+ # 获取Mac地址
|
|
|
+ def get_mac_address():
|
|
|
+ mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
|
|
|
+ return ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
|
|
|
+
|
|
|
+ # ipList = socket.gethostbyname_ex(hostname)
|
|
|
+ # print(ipList)
|
|
|
+ print("主机名:", hostname)
|
|
|
+ print("IP:", ip)
|
|
|
+ print("Mac地址:", get_mac_address())
|
|
|
+ print (reds.get_data(key=res['userID']))
|
|
|
return response.json(0, res)
|
|
|
else:
|
|
|
return response.json(tko.code)
|