LoginController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. namespace App\Http\Controllers\Mobile\Auth;
  3. use Aix\Sms\Contracts\Smser;
  4. use App\Http\Controllers\Mobile\MobileBaseController;
  5. use App\Models\Member;
  6. use App\Services\Auth\AuthService;
  7. use App\Services\Auth\RegisterService;
  8. use App\Services\Common\GeetestService;
  9. use App\Services\Common\SmsService;
  10. use App\Services\Common\TencentCaptchaService;
  11. use App\Services\CommonService;
  12. use App\Validators\AuthValidatorRequest;
  13. use Closure;
  14. use Illuminate\Support\Facades\Auth;
  15. use Illuminate\Support\Facades\Cache;
  16. class LoginController extends MobileBaseController
  17. {
  18. /**
  19. * @var AuthService
  20. */
  21. protected $authService;
  22. /**
  23. * @var SmsService
  24. */
  25. protected $smsService;
  26. /**
  27. * @var GeetestService
  28. */
  29. protected $geetestService;
  30. protected $sub_site = '';
  31. protected $tencentCaptchaService;
  32. /**
  33. * LoginController constructor.
  34. * @param AuthService $authService
  35. * @param SmsService $smsService
  36. * @param GeetestService $geetestService
  37. */
  38. public function __construct(
  39. AuthService $authService,
  40. SmsService $smsService,
  41. GeetestService $geetestService,
  42. TencentCaptchaService $tencentCaptchaService
  43. )
  44. {
  45. $this->authService = $authService;
  46. $this->smsService = $smsService;
  47. $this->geetestService = $geetestService;
  48. $this->tencentCaptchaService = $tencentCaptchaService;
  49. /*$this->middleware(function ($request, Closure $next) {
  50. if (strpos($request->route()->getName(), 'mobile.logout') === false) {
  51. if (Auth::guard('web-member')->check() || Auth::guard('web-company')->check()) {
  52. return redirect(route('mobile.home'));
  53. }
  54. }
  55. return $next($request);
  56. });*/
  57. if (get_subsite_id() > 0) {
  58. $this->sub_site = 'jkq.';
  59. }
  60. }
  61. public function showLoginForm()
  62. {
  63. if (request()->has('redirect_url')) {
  64. session(['url.intended' => urldecode(request()->get('redirect_url'))]);
  65. }
  66. return view('mobile.app.auth.login', ['wap_title' => "个人登录"]);
  67. }
  68. public function showLoginMobileForm()
  69. {
  70. if (request()->has('redirect_url')) {
  71. session(['url.intended' => urldecode(request()->get('redirect_url'))]);
  72. }
  73. return view('mobile.app.auth.login_mobile', ['wap_title' => "个人登录"]);
  74. }
  75. public function showLoginCompanyForm()
  76. {
  77. if (request()->has('redirect_url')) {
  78. session(['url.intended' => urldecode(request()->get('redirect_url'))]);
  79. }
  80. return view('mobile.app.auth.login_company', ['wap_title' => "企业登录"]);
  81. }
  82. public function loginByAccount(AuthValidatorRequest $request)
  83. {
  84. // if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  85. // return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest' => 1]);
  86. // }
  87. if(!$this->tencentCaptchaService->check($request->input('randstr'),$request->input('ticket'),$request->ip())){
  88. return $this->sendErrorResponse("验证码不通过,请重新验证");
  89. }
  90. if (!$member = $this->authService->loginByAccount($request->account, $request->password, $request->autoLogin)) {
  91. // $data['is_need_geetest'] = $this->geetestService->isNeedGeetest(
  92. // config('aix.system.site_safety.site_vo_code.members_login')
  93. // );
  94. $redis = Cache::getRedis();
  95. $value = $redis->get('user_' . $request->account);
  96. //dd($value);
  97. if (!$value) {
  98. $value = 0;
  99. }
  100. if ($value >= 5) {
  101. $redis->expire('user_' . $request->account, 900);
  102. return $this->sendErrorResponse("连续登录失败5次,请15分钟后再尝试!");
  103. }
  104. $redis->set('user_' . $request->account, ++$value);
  105. return $this->sendErrorResponse("账号或密码错误或密码已超过90天未修改,请使用找回密码功能");
  106. }
  107. if ($member->status == 0) {
  108. Auth::guard('web-member')->logout();
  109. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  110. }
  111. $token = CommonService::createToken(1, $member->id);
  112. return $this->sendSuccessResponse([
  113. 'redirect_url' => url($request->session()
  114. ->pull('url.intended', route($this->sub_site . 'mobile.person.index'))),
  115. 'token' => $token,
  116. ]);
  117. }
  118. public function loginBySms(AuthValidatorRequest $request)
  119. {
  120. // if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  121. // return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest' => 1]);
  122. // }
  123. if (!$this->smsService->checkAuthSms(
  124. $request->mobile,
  125. Smser::TEMPLATE_AUTH_LOGIN,
  126. $request->code
  127. )) {
  128. $data['is_need_geetest'] = $this->geetestService->isNeedGeetest(
  129. config('aix.system.site_safety.site_vo_code.members_login')
  130. );
  131. return $this->sendErrorResponse("短信验证码不对", $data);
  132. }
  133. if (!$member = $this->authService->loginByAccount($request->mobile, '', $request->autoLogin)) {
  134. $data['is_need_geetest'] = $this->geetestService->isNeedGeetest(
  135. config('aix.system.site_safety.site_vo_code.members_login')
  136. );
  137. return $this->sendErrorResponse("用户不存在,请先注册账号", $data);
  138. }
  139. if ($member->status == 0) {
  140. Auth::guard('web-member')->logout();
  141. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  142. }
  143. $token = CommonService::createToken(1, $member->id);
  144. return $this->sendSuccessResponse([
  145. 'redirect_url' => url($request->session()
  146. ->pull('url.intended', route($this->sub_site . 'mobile.person.index'))),
  147. 'token' => $token,
  148. ]);
  149. }
  150. public function loginByCompany(AuthValidatorRequest $request)
  151. {
  152. // if (!$this->geetestService->checkGeetest(config('aix.system.site_safety.site_vo_code.members_login'))) {
  153. // return $this->sendErrorResponse("验证码不通过,请重新验证", ['is_need_geetest' => 1]);
  154. // }
  155. if (!$company = $this->authService->loginByCompany(
  156. $request->company_account,
  157. $request->company_password,
  158. $request->autoLogin
  159. )) {
  160. // $data['is_need_geetest'] = $this->geetestService->isNeedGeetest(
  161. // config('aix.system.site_safety.site_vo_code.members_login')
  162. // );
  163. $redis = Cache::getRedis();
  164. $value = $redis->get('user_' . $request->company_account);
  165. if (!$value) {
  166. $value = 0;
  167. }
  168. if ($value >= 5) {
  169. $redis->expire('user_' . $request->company_account, 900);
  170. return $this->sendErrorResponse("连续登录失败5次,请15分钟后再尝试!");
  171. }
  172. $redis->set('user_' . $request->company_account, ++$value);
  173. return $this->sendErrorResponse("账号或密码错误或密码已超过90天未修改,请使用找回密码功能");
  174. }
  175. if ($company->user_status == 0) {
  176. Auth::guard('web-company')->logout();
  177. return $this->sendErrorResponse("你的账号处于封禁状态, 请联系管理员");
  178. }
  179. $token = CommonService::createToken(2, $company->id);
  180. return $this->sendSuccessResponse([
  181. 'redirect_url' => url($request->session()->pull('url.intended', route($this->sub_site . 'mobile.firm.index'))),
  182. 'token' => $token,
  183. ]);
  184. }
  185. public function logout()
  186. {
  187. $this->authService->logout();
  188. return redirect(route($this->sub_site . 'mobile.home'));
  189. }
  190. public function loginMZT(){
  191. if(request()->isMethod('POST')){
  192. $params = request()->post();
  193. $member = Member::where('mobile', '=', $params['user_mobile'])->orderBy('id', 'desc')->first();
  194. if ($member) {
  195. //登录
  196. $this->authService->login($member, 1);
  197. } else {
  198. $registerService = new RegisterService();
  199. // 注册
  200. $member = $registerService->registerPerson([
  201. 'reg_type' => 1,
  202. 'mobile' => $params['user_mobile'],
  203. 'password' => '000000',
  204. 'utype' => 2,
  205. 'reg_source' => 2,
  206. 'member_status' => 0,
  207. ]);
  208. $member->email = empty($params['user_email']) ? '' : $params['user_email'];
  209. $member->username = $params['user_name'];
  210. $member->save();
  211. $this->authService->login($member, 1);
  212. }
  213. return $this->sendSuccessResponse([
  214. 'status' => 1,
  215. 'msg' => '登录成功',
  216. 'url' => route('mobile.home')
  217. ]);
  218. }else{
  219. return view('mobile.app.auth.mzt', ['wap_title' => "闽政通快捷登录"]);
  220. }
  221. }
  222. }