LoginTrait.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace App\Traits;
  3. use App\Jobs\SendEmail;
  4. use App\Services\LoginService;
  5. use Txj\Elastic\Facades\ES;
  6. use Gregwar\Captcha\CaptchaBuilder;
  7. use Gregwar\Captcha\PhraseBuilder;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\DB;
  10. use Illuminate\Support\Facades\Hash;
  11. trait LoginTrait
  12. {
  13. /**
  14. * 是否开启登录日志记录
  15. *
  16. * @var bool
  17. */
  18. private $is_open_login_log = false;
  19. /**
  20. * 退出登录
  21. *
  22. * @return mixed
  23. */
  24. public function loginOut()
  25. {
  26. $tokenValue = $this->getToken();
  27. $loginServer = new LoginService($this->siteAliasName);
  28. if (empty($tokenValue)) {
  29. return responseMessage(2001, '操作失败!');
  30. } else {
  31. $loginServer->clearLoginInfo($tokenValue);
  32. return responseMessage(1001, '操作成功!');
  33. }
  34. }
  35. /**
  36. * 获取加密的rsa公钥
  37. *
  38. * @return \Illuminate\Http\JsonResponse
  39. */
  40. public function getKey()
  41. {
  42. $loginService = new LoginService($this->siteAliasName);
  43. $publicRSAKey = preg_replace('/-----BEGIN PUBLIC KEY-----|-----END PUBLIC KEY-----|\r|\n/is', '', $loginService->getPublicKey());
  44. return responseMessage(1002, '', $publicRSAKey);
  45. }
  46. /**
  47. * 获取图形验证码信息
  48. *
  49. * @return mixed
  50. */
  51. public function yzm()
  52. {
  53. $phraseBuilder = new PhraseBuilder(4, '0123456789');
  54. $builder = new CaptchaBuilder(null, $phraseBuilder);
  55. $builder->build();
  56. $yzm = $builder->getPhrase();
  57. $yzmImg = $builder->inline();
  58. $loginService = new LoginService($this->siteAliasName);
  59. $loginService->saveImgYzm($yzm);
  60. return responseMessage(1002, 'success', $yzmImg);
  61. }
  62. /**
  63. * 检验图形验证码
  64. *
  65. * @param $yzm
  66. * @return bool
  67. */
  68. protected function checkImgYzm($yzm)
  69. {
  70. $loginService = new LoginService($this->siteAliasName);
  71. return $loginService->checkImgYzm($yzm);
  72. }
  73. /**
  74. * 清除图形验证码
  75. */
  76. protected function clearYzm()
  77. {
  78. $loginService = new LoginService($this->siteAliasName);
  79. $loginService->clearImgYzm();
  80. }
  81. /**
  82. * 设置登录状态
  83. *
  84. * @param $userInfo
  85. * @return array
  86. */
  87. protected function setLoginStatus($userInfo)
  88. {
  89. $loginService = new LoginService($this->siteAliasName);
  90. return $loginService->setLoginCookie($userInfo);
  91. }
  92. /**
  93. * 发送短信验证码
  94. */
  95. public function sendSms()
  96. {
  97. $requestData = Request::all();
  98. $mobile = $requestData['mobile'] ?? '';
  99. $type = $requestData['type'] ?? '';
  100. if (empty($type) || !in_array($type, ['weregister', 'register', 'forget', 'untie_mobile'])) {
  101. $msg = ['code' => 2001, 'msg' => '参数错误!'];
  102. } elseif (empty($mobile)) {
  103. $msg = ['code' => 2002, 'msg' => '请输入手机号!'];
  104. } elseif (!isMobile($mobile)) {
  105. $msg = ['code' => 2003, 'msg' => '请输入正确的手机号!'];
  106. } else {
  107. $msg = $this->smsService->sendSms($mobile, $type);
  108. }
  109. return response()->json($msg);
  110. }
  111. /**
  112. * 通过手机号和密码登录
  113. *
  114. * @param $where
  115. * @param $input_password
  116. * @param $table_user
  117. * @return \Illuminate\Http\JsonResponse
  118. */
  119. protected function toLoginIn($where, $input_password, $table_user)
  120. {
  121. $loginService = new LoginService($this->siteAliasName);
  122. $result = ES::table($table_user)->where($where)->queryOne();
  123. if ($result) {
  124. if (empty($result['password'])) {
  125. return responseMessage(2006,'没有设置密码,请点击“忘记密码”,重新设置!');
  126. } else {
  127. //验证密码的长度,必须是8-20位
  128. $length = mb_strlen($input_password);
  129. if ($length < 8 || $length > 20) {
  130. return responseMessage(2006,'密码长度必须介于 8 - 20 个字符之间!');
  131. }
  132. if (Hash::check($input_password, $result['password'])) {
  133. $encryptArr = $loginService->setLoginCookie($result); //设置登录状态
  134. unset($result['id']);
  135. unset($result['password']);
  136. $encryptArr['info'] = $result;
  137. return responseMessage(1001,'登录成功',$encryptArr);
  138. } else {
  139. return responseMessage(2007,'帐号 或 密码 不正确');
  140. }
  141. // 登录日志
  142. // if ($this->is_open_login_log) {
  143. // todo 不同的sitealias 不能的日志表
  144. // $this->dispatch(new UserLog($table_user, [
  145. // 'user_id' => $result['id'],
  146. // 'ip' => getRealIp(),
  147. // 'user_agent' => \Illuminate\Support\Facades\Request::userAgent(),
  148. // 'type' => 1, // 1 登录日志 2 操作日志
  149. // 'content' => $msg['msg'],
  150. // ]));
  151. // }
  152. }
  153. } else {
  154. return responseMessage(2008,'帐号不存在,请先注册!');
  155. }
  156. }
  157. }