LoginController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <?php
  2. namespace App\Http\Controllers\Web\Auth;
  3. use Aix\Sms\Contracts\Smser;
  4. use App\Http\Controllers\Web\WebBaseController;
  5. use App\Services\Auth\AuthService;
  6. use App\Services\Common\GeetestService;
  7. use App\Services\Common\SmsService;
  8. use App\Validators\AuthValidatorRequest;
  9. use Closure;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Cache;
  12. class LoginController extends WebBaseController
  13. {
  14. /**
  15. * @var AuthService
  16. */
  17. protected $authService;
  18. /**
  19. * @var SmsService
  20. */
  21. protected $smsService;
  22. /**
  23. * @var GeetestService
  24. */
  25. protected $geetestService;
  26. /**
  27. * LoginController constructor.
  28. * @param AuthService $authService
  29. * @param SmsService $smsService
  30. * @param GeetestService $geetestService
  31. */
  32. public function __construct(
  33. AuthService $authService,
  34. SmsService $smsService,
  35. GeetestService $geetestService
  36. ) {
  37. $this->authService = $authService;
  38. $this->smsService = $smsService;
  39. $this->geetestService = $geetestService;
  40. $this->middleware(function ($request, Closure $next) {
  41. if ($request->route()->getName() != 'logout') {
  42. if (Auth::guard('web-member')->check() || Auth::guard('web-company')->check() || Auth::guard('web-organization')->check()) {
  43. return redirect(route('home'));
  44. }
  45. }
  46. return $next($request);
  47. });
  48. }
  49. public function showLoginForm()
  50. {
  51. if (request()->has('redirect_url')) {
  52. session(['url.intended'=>urldecode(request()->get('redirect_url'))]);
  53. }
  54. return view('app.auth.login');
  55. }
  56. public function showLoginCompanyForm()
  57. {
  58. if (request()->has('redirect_url')) {
  59. session(['url.intended'=>urldecode(request()->get('redirect_url'))]);
  60. }
  61. return view('app.auth.login_company');
  62. }
  63. public function showLoginOrgForm()
  64. {
  65. if (request()->has('redirect_url')) {
  66. session(['url.intended'=>urldecode(request()->get('redirect_url'))]);
  67. }
  68. return view('app.auth.login_org');
  69. }
  70. public function loginByAccount(AuthValidatorRequest $request)
  71. {
  72. if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  73. return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest'=>1]);
  74. }
  75. if (!$member=$this->authService->loginByAccount($request->account, $request->password, $request->autoLogin)) {
  76. $data['is_need_geetest']=$this->geetestService->isNeedGeetest(
  77. config('aix.system.site_safety.site_vo_code.members_login')
  78. );
  79. $redis = Cache::getRedis();
  80. $value = $redis->get('user_'.$request->account);
  81. //dd($value);
  82. if(!$value){
  83. $value = 0;
  84. }
  85. if($value >= 5){
  86. $redis->expire('user_'.$request->account,900);
  87. return $this->sendErrorResponse("连续登录失败5次,请15分钟后再尝试!", $data);
  88. }
  89. $redis->set('user_'.$request->account,++$value);
  90. return $this->sendErrorResponse("账号或密码错误或密码过期,请使用找回密码功能", $data);
  91. }
  92. // if(!$this->authService->checkPwdLog($member)){
  93. // return $this->sendErrorResponse("密码已过期,请使用找回密码重新设置密码");
  94. // }
  95. if ($member->status == 0) {
  96. Auth::guard('web-member')->logout();
  97. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  98. }
  99. return $this->sendSuccessResponse([
  100. 'redirect_url'=>url($request->session()
  101. ->pull('url.intended', route('person.index')))]);
  102. }
  103. public function loginBySms(AuthValidatorRequest $request)
  104. {
  105. if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  106. return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest'=>1]);
  107. }
  108. if (!$this->smsService->checkAuthSms(
  109. $request->mobile,
  110. Smser::TEMPLATE_AUTH_LOGIN,
  111. $request->code
  112. )) {
  113. $data['is_need_geetest']=$this->geetestService->isNeedGeetest(
  114. config('aix.system.site_safety.site_vo_code.members_login')
  115. );
  116. return $this->sendErrorResponse("短信验证码不对", $data);
  117. }
  118. if (!$member=$this->authService->loginByAccount($request->mobile, '', $request->autoLogin)) {
  119. $data['is_need_geetest']=$this->geetestService->isNeedGeetest(
  120. config('aix.system.site_safety.site_vo_code.members_login')
  121. );
  122. return $this->sendErrorResponse("用户不存在,请先注册账号", $data);
  123. }
  124. if ($member->status == 0) {
  125. Auth::guard('web-member')->logout();
  126. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  127. }
  128. return $this->sendSuccessResponse([
  129. 'redirect_url'=>url($request->session()
  130. ->pull('url.intended', route('person.index')))]);
  131. }
  132. public function loginByCompany(AuthValidatorRequest $request)
  133. {
  134. if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  135. return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest'=>1]);
  136. }
  137. if (!$company=$this->authService->loginByCompany(
  138. $request->company_account,
  139. $request->company_password,
  140. $request->autoLogin
  141. )) {
  142. $data['is_need_geetest']=$this->geetestService->isNeedGeetest(
  143. config('aix.system.site_safety.site_vo_code.members_login')
  144. );
  145. $redis = Cache::getRedis();
  146. $value = $redis->get('user_'.$request->account);
  147. //dd($value);
  148. if(!$value){
  149. $value = 0;
  150. }
  151. if($value >= 5){
  152. $redis->expire('user_'.$request->account,900);
  153. return $this->sendErrorResponse("连续登录失败5次,请15分钟后再尝试!", $data);
  154. }
  155. $redis->set('user_'.$request->account,++$value);
  156. return $this->sendErrorResponse("账号或密码错误或密码过期,请使用找回密码功能", $data);
  157. //return $this->sendErrorResponse("账号或密码错误", $data);
  158. }
  159. if ($company->user_status == 0) {
  160. Auth::guard('web-company')->logout();
  161. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  162. }
  163. return $this->sendSuccessResponse([
  164. 'redirect_url'=>url($request->session()
  165. ->pull('url.intended', route('com.index')))]);
  166. }
  167. public function loginByOrg(AuthValidatorRequest $request)
  168. {
  169. if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  170. return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest'=>1]);
  171. }
  172. if (!$organization=$this->authService->loginByOrganization(
  173. $request->org_account,
  174. $request->org_password,
  175. $request->autoLogin
  176. )) {
  177. $data['is_need_geetest']=$this->geetestService->isNeedGeetest(
  178. config('aix.system.site_safety.site_vo_code.members_login')
  179. );
  180. return $this->sendErrorResponse("账号或密码错误", $data);
  181. }
  182. if ($organization->user_status == 0) {
  183. Auth::guard('web-organization')->logout();
  184. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  185. }
  186. return $this->sendSuccessResponse([
  187. 'redirect_url'=>url($request->session()
  188. ->pull('url.intended', route('org.index')))]);
  189. }
  190. public function logout()
  191. {
  192. $this->authService->logout();
  193. return redirect(route('home'));
  194. }
  195. }