Login.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php namespace App\Http\Controllers\Admin;
  2. use App\Models\AdminUser;
  3. use App\Models\AdminRule;
  4. use App\Servers\Tencent\Sms;
  5. use Illuminate\Support\Facades\DB;
  6. /**
  7. * 管理后台登录控制器
  8. *
  9. * @author 刘相欣
  10. *
  11. * */
  12. class Login extends Admin {
  13. /**
  14. * 登录方法
  15. *
  16. * */
  17. public function index(AdminUser $AdminUser,AdminRule $AdminRule){
  18. if( request()->isMethod('post') ){
  19. // 接收数据
  20. $username = request('username','');
  21. // 接收数据
  22. $code = request('code','');
  23. // 验证
  24. if( !$username || !$code ) return json_send(['code'=>'error','msg'=>'用户名验证码必填']);
  25. // 查询用户
  26. $admin = $AdminUser->orWhere('username',$username)->orWhere('phone',$username)->first(['uid','username','phone','status','password','insert_time','update_time']);
  27. // 用户不存在
  28. if( !$admin ) return json_send(['code'=>'error','msg'=>'用户名不存在或已被停用']);
  29. // 用户不存在
  30. if( $admin['status'] ) return json_send(['code'=>'error','msg'=>'用户名不存在或已被停用']);
  31. // 获取数据
  32. $adminRule = $AdminRule::query()->where('admin_uid',$admin['uid'])->first();
  33. // 用户不存在
  34. if( !$admin || $admin['status'] ) return json_send(['code'=>'error','msg'=>'用户名不存在或已被停用']);
  35. // 比对密码
  36. if( md5($code) != $admin['password'] ) return json_send(['code'=>'error','msg'=>'密码错误或账号不存在']);
  37. // 查询用户的组别
  38. $group = DB::table('auth_group_access')->where(['user_uid'=>$admin['uid']])->pluck('group_id')->toArray();
  39. // 权限小组
  40. $admin['group_id'] = $group;
  41. // 删除敏感数据-密码
  42. unset($admin['password']);
  43. // 存储登录状态
  44. session(['userAuth'=>$admin]);
  45. session(['userRule'=>$adminRule]);
  46. // 表单令牌
  47. return json_send(['code'=>'success','msg'=>'登录成功','path'=>url('admin')]);
  48. }
  49. // 加载模板
  50. return $this->fetch();
  51. }
  52. /**
  53. * 退出登录方法
  54. *
  55. * */
  56. public function out(){
  57. // 清除
  58. session()->flush();
  59. // 跳转
  60. return $this->error('退出成功',url('admin/login/index'));
  61. }
  62. /**
  63. * 发送验证码
  64. *
  65. * */
  66. public function send_code(Sms $Sms){
  67. if( request()->isMethod('post') ){
  68. // 接收数据
  69. $username = request('username','');
  70. // 如果有数据,并且短信验证码时间未过时
  71. if( !$username ) return json_send(['code'=>'error','msg'=>'用户名必填']);
  72. // 获取数据
  73. $session = session('validSmsCode');
  74. // 如果有数据,并且验证码创建的时间在一分钟之内
  75. if( $session && time() - $session['create_time'] < 60 ) return json_send(['code'=>'error','msg'=>'请稍后再试']);
  76. // 查询用户
  77. $admin = DB::table('admin')->orWhere('username',$username)->orWhere('phone',$username)->first(['uid','username','phone','status']);
  78. // 用户不存在
  79. if( !$admin || $admin['status']) return json_send(['code'=>'error','msg'=>'用户名不存在或已被停用']);
  80. // 生成验证码
  81. $code = strval(rand(100000,999999));
  82. // 调用验证码发送
  83. $result = $Sms->send($admin['phone'],$code);
  84. // 如果失败
  85. if( isset($result['error']) ) return json_send(['code'=>'error','msg'=>$result['error']]);
  86. // session数据
  87. $session = ['code'=>$code,'phone'=>$admin['phone'],'create_time'=>time()];
  88. // 存入session
  89. session(['validSmsCode'=>$session]);
  90. // 成功结果
  91. return json_send(['code'=>'success','msg'=>'发送成功']);
  92. }
  93. }
  94. }