LoginController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace App\Http\Controllers\AdminApi;
  3. use App\Http\Controllers\AdminController;
  4. use App\Models\User;
  5. use App\Servers\System\CommonServer;
  6. use App\Servers\System\PassServer;
  7. use App\Servers\System\SmsServer;
  8. use Illuminate\Support\Facades\Auth;
  9. use Illuminate\Support\Facades\Validator;
  10. use Illuminate\Support\Str;
  11. class LoginController extends AdminController
  12. {
  13. /**
  14. * 基本路由
  15. * @return \Illuminate\Http\JsonResponse
  16. */
  17. function login(){
  18. // $mobile = request()->input('phone', '');
  19. // if (empty($mobile)) {
  20. // return $this->apiResponseError('请输入手机号码');
  21. // }
  22. // $password = request()->input('password', '');
  23. // if (empty($password)) {
  24. // return $this->apiResponseError('请输入登录密码');
  25. // }
  26. $data=request()->input();
  27. $rules = [
  28. 'account'=>'required|max:255',
  29. 'password'=>'required',
  30. ];
  31. $rulesMsg = [
  32. 'account.required' => '请输入账号',
  33. 'account.max' => '账号最大255',
  34. 'password.required' => '请输入登录密码',
  35. ];
  36. $validator = Validator::make($data, $rules,$rulesMsg);
  37. if ($validator->fails()) {
  38. return $this->apiResponseError($validator->errors()->first());
  39. }
  40. $validatedData = $validator->validated();
  41. $user = User::where('account', $validatedData['account'])->where('is_del',0)->select(['id', 'password', 'encrypt'])->first();
  42. if(empty($user)){
  43. return $this->apiResponseError('用户信息不存在');
  44. }
  45. $pass_server = PassServer::creatServer($validatedData['password'], $user->{'encrypt'});
  46. if (!$pass_server->verifyPass($user->{'password'})) {
  47. return $this->apiResponseError('登陆密码错误');
  48. }
  49. $token = Str::random(60);
  50. $api_token = hash('sha256', $token);
  51. $ret = $user->forceFill(['api_token' => $api_token])->save();
  52. if (empty($ret)) {
  53. return $this->apiResponseError('登陆失效');
  54. }
  55. Auth::loginUsingId($user->{'id'});
  56. return $this->apiResponseSuccess('登陆成功', ['u_id' =>$user->{'id'}, 'token' => $api_token]);
  57. }
  58. /**
  59. * 修改登录密码-忘记密码
  60. * @return \Illuminate\Http\JsonResponse
  61. */
  62. function retrievePassword()
  63. {
  64. $mobile = request()->input('phone', '');
  65. $password = request()->input('password', '');
  66. $confirm_password = request()->input('confirm_password','');
  67. $password = str_replace(' ', '', $password);
  68. $confirm_password = str_replace(' ', '', $confirm_password);
  69. if (empty($password)) {
  70. return $this->apiResponseError('请设置登录密码');
  71. }
  72. if (strlen($password) < 6 || strlen($password) > 12) {
  73. return $this->apiResponseError('密码为6-12位');
  74. }
  75. if ($password != $confirm_password){
  76. return $this->apiResponseError('确认密码错误');
  77. }
  78. if (empty($mobile)) {
  79. return $this->apiResponseError('请输入手机号码');
  80. }
  81. if (!CommonServer::creatServer()->verifyPhoneNumber($mobile)) {
  82. return $this->apiResponseError('手机号码格式错误');
  83. }
  84. $code = request()->input('code', '');
  85. if (empty($code)) {
  86. return $this->apiResponseError('请输入验证码');
  87. }
  88. $send_server = SmsServer::creatServer();
  89. $code_ret = $send_server->verifyCode($mobile, $code, 'retrieve');
  90. if (empty($code_ret)) {
  91. return $this->apiResponseError($send_server->getErrorMsg() ?: '验证码错误');
  92. }
  93. $user = User::where('phone', $mobile)->where('is_del',0)->first();
  94. if(empty($user)){
  95. return $this->apiResponseError('账户信息不存在');
  96. }
  97. $pass_server = PassServer::creatServer($password, $user->{'encrypt'});
  98. $new_pass = $pass_server->creatPassword();
  99. $ret = $user->update(['password' => $new_pass['password']]);
  100. if (empty($ret)) {
  101. return $this->apiResponseError('密码修改失败');
  102. } else {
  103. return $this->apiResponseSuccess('密码修改成功');
  104. }
  105. }
  106. }