LoginAction.class.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /**
  3. *
  4. * Login(后台登陆页面)
  5. *
  6. */
  7. if(!defined("Ainaphp")) exit("Access Denied");
  8. class LoginAction extends Action{
  9. private $adminid ,$groupid ,$sysConfig ,$cache_model,$Config,$menudata ;
  10. function _initialize()
  11. {
  12. $this->sysConfig = F('sys.config');
  13. C('ADMIN_ACCESS',$this->sysConfig['ADMIN_ACCESS']);
  14. import('@.TagLib.TagLibYP');
  15. $this->adminid = $_SESSION['adminid'];
  16. $this->groupid = $_SESSION['groupid'];
  17. }
  18. /**
  19. * 登录页
  20. *
  21. */
  22. public function index()
  23. {
  24. if(is_file(RUNTIME_FILE))@unlink(RUNTIME_FILE);
  25. $this->menudata = F('Menu');
  26. $this->cache_model=array('Lang','Menu','Config','Module','Role','Category','Posid','Field','Type','Urlrule','Dbsource');
  27. if(empty($this->sysConfig['ADMIN_ACCESS']) || empty($this->menudata)){
  28. foreach($this->cache_model as $r){
  29. savecache($r);
  30. }
  31. $this->sysConfig = F('sys.config');
  32. C('ADMIN_ACCESS',$this->sysConfig['ADMIN_ACCESS']);
  33. }
  34. if($this->_adminid){
  35. $this->assign('jumpUrl',U('Index/index'));
  36. $this->success(L('logined'));
  37. }
  38. $this->assign ( 'admin_verify', $this->sysConfig['ADMIN_VERIFY'] );
  39. $this->display();
  40. }
  41. /**
  42. * 提交登录
  43. *
  44. */
  45. public function doLogin()
  46. {
  47. $dao = M('User');
  48. $ip =get_client_ip();
  49. if(empty($this->sysConfig['ADMIN_ACCESS'])) $this->error(L('NO SYSTEM CONFIG FILE'));
  50. $username = get_safe_replace(trim($_POST['username']));
  51. $password = get_safe_replace(trim($_POST['password']));
  52. $verifyCode = trim($_POST['verifyCode']);
  53. if(empty($username) || empty($password)){
  54. $this->error(L('empty_username_empty_password'));
  55. }elseif($_SESSION['verify'] && $this->sysConfig['ADMIN_VERIFY'] && md5($verifyCode) != $_SESSION['verify']){
  56. $this->error(L('error_verify'));
  57. }
  58. $time =time();
  59. $logwhere=array();
  60. $logwhere['time']=array('EGT',$time-1800);
  61. $logwhere['ip']=array('eq',$ip);
  62. $logwhere['error'] =1;
  63. $lognum= M('Log')->where($logwhere)->count();
  64. if($lognum>=5)$this->error("错误次数过多,请联系管理人员!");
  65. $condition = array();
  66. $condition['username'] =array('eq',$username);
  67. import ( '@.ORG.RBAC' );
  68. $authInfo = RBAC::authenticate($condition);
  69. //使用用户名、密码和状态的方式进行认证
  70. if(false === $authInfo) {
  71. $data=array();
  72. $data['username']=$username;
  73. $data['ip']=$ip;
  74. $data['time']=$time;
  75. $data['note']=L('empty_userid');
  76. $data['error'] =1;
  77. M('Log')->add($data);
  78. $this->error(L('empty_userid'));
  79. }else {
  80. if($authInfo['password'] != sysmd5($password)) {
  81. $data=array();
  82. $data['username']=$username;
  83. $data['ip']=$ip;
  84. $data['time']=$time;
  85. $data['note']=L('password_error').':'.$password;
  86. $data['error'] =1;
  87. M('Log')->add($data);
  88. $this->error(L('password_error'));
  89. }
  90. $_SESSION['username'] = $authInfo['username'];
  91. $_SESSION['adminid'] = $_SESSION['userid'] = $authInfo['id'];
  92. $_SESSION['groupid'] = $authInfo['groupid'];
  93. $_SESSION['adminaccess'] = C('ADMIN_ACCESS');
  94. $_SESSION[C('USER_AUTH_KEY')] = $authInfo['id'];
  95. $_SESSION['email'] = $authInfo['email'];
  96. $_SESSION['lastLoginTime'] = $authInfo['last_logintime'];
  97. $_SESSION['login_count'] = $authInfo['login_count']+1;
  98. if($authInfo['groupid']==1) {
  99. $_SESSION[C('ADMIN_AUTH_KEY')]=true;
  100. }
  101. //保存登录信息
  102. $data = array();
  103. $data['id'] = $authInfo['id'];
  104. $data['last_logintime'] = $time;
  105. $data['last_ip'] = get_client_ip();
  106. $data['login_count'] = array('exp','login_count+1');
  107. $dao->save($data);
  108. // 缓存访问权限
  109. RBAC::saveAccessList();
  110. $data=array();
  111. $data['username']=$username;
  112. $data['ip']=$ip;
  113. $data['time']=$time;
  114. $data['note']=L('login_ok');
  115. M('Log')->add($data);
  116. if($_POST['ajax']){
  117. $this->ajaxReturn($authInfo,L('login_ok'),1);
  118. }else{
  119. $this->assign('jumpUrl',U('Index/index'));
  120. $this->success(L('login_ok'));
  121. }
  122. }
  123. }
  124. /**
  125. * 退出登录
  126. *
  127. */
  128. public function logout()
  129. {
  130. if(isset($_SESSION[C('USER_AUTH_KEY')])) {
  131. unset($_SESSION[C('USER_AUTH_KEY')]);
  132. unset($_SESSION);
  133. session_destroy();
  134. $this->assign('jumpUrl',U('Login/index'));
  135. $this->success(L('loginouted'));
  136. }else {
  137. $this->assign('jumpUrl',U('Login/index'));
  138. $this->error(L('logined'));
  139. }
  140. }
  141. function checkEmail(){
  142. $user=M('User');
  143. $email=$_GET['email'];
  144. $userid=intval($_GET['userid']);
  145. if(empty($userid)){
  146. if($user->getByEmail($email)){
  147. echo 'false';
  148. }else{
  149. echo 'true';
  150. }
  151. }else{
  152. //判断邮箱是否已经使用
  153. if($user->where("id!={$userid} and email='{$email}'")->find()){
  154. echo 'false';
  155. }else{
  156. echo 'true';
  157. }
  158. }
  159. exit;
  160. }
  161. }