Login.php 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 || $admin['status'] ) return json_send(['code'=>'error','msg'=>'用户名不存在或已被停用']);
  29. // 比对密码
  30. if( md5($code) != $admin['password'] ) return json_send(['code'=>'error','msg'=>'密码错误或账号不存在']);
  31. $admin = $admin->toArray();
  32. // 获取数据
  33. $adminRule = $AdminRule::query()->where('admin_uid',$admin['uid'])->first();
  34. // 查询用户的组别
  35. $group = DB::table('auth_group_access')->where(['user_uid'=>$admin['uid']])->pluck('group_id')->toArray();
  36. // 权限小组
  37. $admin['group_id'] = $group;
  38. // 删除敏感数据-密码
  39. unset($admin['password']);
  40. // 存储登录状态
  41. session(['userAuth'=>$admin]);
  42. session(['userRule'=>$adminRule]);
  43. // 表单令牌
  44. return json_send(['code'=>'success','msg'=>'登录成功','path'=>url('admin')]);
  45. }
  46. // 加载模板
  47. return $this->fetch();
  48. }
  49. /**
  50. * 退出登录方法
  51. *
  52. * */
  53. public function out(){
  54. // 清除
  55. session()->flush();
  56. // 跳转
  57. return $this->error('退出成功',url('admin/login/index'));
  58. }
  59. /**
  60. * 发送验证码
  61. *
  62. * */
  63. public function send_code(Sms $Sms){
  64. if( request()->isMethod('post') ){
  65. // 接收数据
  66. $username = request('username','');
  67. // 如果有数据,并且短信验证码时间未过时
  68. if( !$username ) return json_send(['code'=>'error','msg'=>'用户名必填']);
  69. // 获取数据
  70. $session = session('validSmsCode');
  71. // 如果有数据,并且验证码创建的时间在一分钟之内
  72. if( $session && time() - $session['create_time'] < 60 ) return json_send(['code'=>'error','msg'=>'请稍后再试']);
  73. // 查询用户
  74. $admin = DB::table('admin')->orWhere('username',$username)->orWhere('phone',$username)->first(['uid','username','phone','status']);
  75. // 用户不存在
  76. if( !$admin || $admin['status']) return json_send(['code'=>'error','msg'=>'用户名不存在或已被停用']);
  77. // 生成验证码
  78. $code = strval(rand(100000,999999));
  79. // 调用验证码发送
  80. $result = $Sms->send($admin['phone'],$code);
  81. // 如果失败
  82. if( isset($result['error']) ) return json_send(['code'=>'error','msg'=>$result['error']]);
  83. // session数据
  84. $session = ['code'=>$code,'phone'=>$admin['phone'],'create_time'=>time()];
  85. // 存入session
  86. session(['validSmsCode'=>$session]);
  87. // 成功结果
  88. return json_send(['code'=>'success','msg'=>'发送成功']);
  89. }
  90. }
  91. }