AuthController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace App\Modules\Mini\Controllers;
  3. use App\Base\BaseController;
  4. use App\Base\Validation\Phone;
  5. use App\Exceptions\ClientException;
  6. use App\Models\Cart;
  7. use App\Models\User\User;
  8. use App\Models\User\UserFav;
  9. use App\Modules\Mini\Services\AuthService;
  10. use App\Modules\Mini\Services\CaptchaService;
  11. use App\Modules\Mini\Services\EmailService;
  12. use App\Modules\Mini\Services\WechatService;
  13. use Illuminate\Support\Facades\Auth;
  14. class AuthController extends BaseController
  15. {
  16. public function codeToSession()
  17. {
  18. $params = $this->valid([
  19. "code" => "required",
  20. ]);
  21. $sessionData = app(WechatService::class)->codeToSession($params['code']);
  22. $token = app(AuthService::class)->authByOpenid($sessionData['openid']);
  23. return $this->ok([
  24. "token" => $token,
  25. "openid" => $sessionData['openid'],
  26. "sessionKey" => $sessionData['session_key'],
  27. ]);
  28. }
  29. public function decryptUserInfo()
  30. {
  31. $params = $this->valid([
  32. "iv" => "required",
  33. "encrypted_data" => "required",
  34. "session_key" => "required",
  35. ]);
  36. app(WechatService::class)->decryptUserInfo($params);
  37. /** @var User $user */
  38. $user = \Auth::user();
  39. return $this->ok($user->format());
  40. }
  41. public function updateUserInfo()
  42. {
  43. $params = $this->valid([
  44. "avatar" => "required",
  45. "name" => "string",
  46. ]);
  47. $user = app(AuthService::class)->updateUserInfo(Auth::user(), $params);
  48. return $this->ok($user->format());
  49. }
  50. public function decryptPhone()
  51. {
  52. $params = $this->valid([
  53. "iv" => "required",
  54. "encrypted_data" => "required",
  55. "session_key" => "required",
  56. ]);
  57. app(WechatService::class)->decryptPhone($params);
  58. /** @var User $user */
  59. $user = \Auth::user();
  60. return $this->ok($user->format());
  61. }
  62. public function profile()
  63. {
  64. /** @var User $user */
  65. $user = Auth::user();
  66. return $this->ok([
  67. "id" => $user->id,
  68. "token" => app(AuthService::class)->encryptToken($user->id),
  69. "name" => $user->name,
  70. "avatar" => $user->avatar,
  71. "company" => [
  72. "id" => optional($user->company)->id ?? 0,
  73. "name" => optional($user->company)->name ?? "",
  74. ],
  75. "cart_total" => Cart::where("user_id", $user->id)->count(),
  76. "fav_total" => UserFav::where("user_id", $user->id)->count(),
  77. ]);
  78. }
  79. public function test()
  80. {
  81. $id = request()->input("id");
  82. return $this->ok(app(AuthService::class)->encryptToken($id));
  83. }
  84. public function emailCaptcha()
  85. {
  86. $params = $this->valid([
  87. "email" => "required|email",
  88. "source" => "required",
  89. ]);
  90. return $this->ok(app(EmailService::class)->emailCaptcha($params['email'], $params['source']));
  91. }
  92. public function register()
  93. {
  94. $params = $this->valid([
  95. "email" => "required|email",
  96. "phone" => ["required", new Phone()],
  97. "password" => "required",
  98. "captcha" => "required",
  99. ]);
  100. if (!app(CaptchaService::class)->checkCaptcha($params['email'], $params['captcha'])) {
  101. throw new ClientException("验证码错误");
  102. }
  103. $user = app(AuthService::class)->register($params);
  104. return $this->ok($user->format());
  105. }
  106. public function login()
  107. {
  108. $params = $this->valid([
  109. "userinfo" => "required",
  110. "password" => "required",
  111. ]);
  112. $user = app(AuthService::class)->login($params);
  113. return $this->ok($user->format());
  114. }
  115. public function resetPassword()
  116. {
  117. $params = $this->valid([
  118. "email" => "required|email",
  119. "password" => "required|min:6",
  120. "captcha" => "required",
  121. ]);
  122. if (!app(CaptchaService::class)->checkCaptcha($params['email'], $params['captcha'])) {
  123. throw new ClientException("验证码错误");
  124. }
  125. $user = app(AuthService::class)->resetPassword($params);
  126. return $this->ok($user->format());
  127. }
  128. }