AccountService.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Models\MemberSocialAccount;
  4. use App\Models\MemberUser;
  5. use Illuminate\Support\Facades\Auth;
  6. use Illuminate\Support\Facades\Cache;
  7. class AccountService
  8. {
  9. /**
  10. * 发送验证码
  11. */
  12. public function sendVerifyCode(string $mobile)
  13. {
  14. // 生成验证码
  15. $code = mt_rand(100000, 999999);
  16. // 保存验证码到缓存
  17. Cache::put("verify_code:{$mobile}", $code, 300);
  18. // TODO: 调用短信服务发送验证码
  19. return ['code' => $code];
  20. }
  21. /**
  22. * 用户登录
  23. */
  24. public function login(string $mobile, string $code)
  25. {
  26. // 验证验证码
  27. $cacheCode = Cache::get("verify_code:{$mobile}");
  28. if (! $cacheCode || $cacheCode != $code) {
  29. throw new \Exception('验证码错误');
  30. }
  31. // 查找或创建用户
  32. $user = MemberUser::firstOrCreate(
  33. ['mobile' => $mobile],
  34. [
  35. 'state' => 'enable',
  36. 'register_area' => request()->header('area_code'),
  37. ]
  38. );
  39. // 生成token
  40. $token = $user->createToken('auth-token')->plainTextToken;
  41. return [
  42. 'token' => $token,
  43. 'user' => $user,
  44. ];
  45. }
  46. /**
  47. * 微信登录
  48. */
  49. public function wxLogin(string $openid)
  50. {
  51. // 查找或创建微信用户
  52. $socialAccount = MemberSocialAccount::firstOrCreate(
  53. [
  54. 'platform' => 'WECHAT',
  55. 'social_id' => $openid,
  56. ]
  57. );
  58. $user = $socialAccount->user;
  59. if (! $user) {
  60. $user = MemberUser::create([
  61. 'state' => 'enable',
  62. 'register_area' => request()->header('area_code'),
  63. ]);
  64. $socialAccount->update(['user_id' => $user->id]);
  65. }
  66. // 生成token
  67. $token = $user->createToken('auth-token')->plainTextToken;
  68. return [
  69. 'token' => $token,
  70. 'user' => $user,
  71. ];
  72. }
  73. /**
  74. * 用户退出
  75. */
  76. public function logout()
  77. {
  78. $user = Auth::user();
  79. $user->tokens()->delete();
  80. return ['message' => '退出成功'];
  81. }
  82. /**
  83. * 用户注销
  84. */
  85. public function deleteAccount()
  86. {
  87. $user = Auth::user();
  88. if (! $user || $user->state !== 'enable') {
  89. throw new \Exception('用户状态异常');
  90. }
  91. $user->state = 'disable';
  92. $user->save();
  93. $user->delete();
  94. $user->tokens()->delete();
  95. return ['message' => '账号已注销'];
  96. }
  97. }