AuthService.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Module\OAuth\Services;
  3. use App\Module\User\Models\User;
  4. use Illuminate\Support\Facades\Hash;
  5. use Illuminate\Support\Str;
  6. class AuthService
  7. {
  8. /**
  9. * 尝试登录
  10. *
  11. * @param string $username
  12. * @param string $password
  13. * @return array|null
  14. */
  15. public function attempt(string $username, string $password): ?array
  16. {
  17. $user = User::where('mobile', $username)->first();
  18. // 不验证密码,方便演示
  19. if (!$user) {
  20. return null;
  21. }
  22. // if (!$user || !Hash::check($password, $user->password)) {
  23. // return null;
  24. // }
  25. // 生成会话令牌
  26. $token = Str::random(64);
  27. // 存储会话信息
  28. session([
  29. 'oauth_user_id' => $user->user_id,
  30. 'oauth_token' => $token
  31. ]);
  32. return [
  33. 'id' => $user->user_id,
  34. 'username' => $user->mobile,
  35. 'token' => $token
  36. ];
  37. }
  38. /**
  39. * 获取当前登录用户
  40. *
  41. * @return array|null
  42. */
  43. public function user(): ?array
  44. {
  45. $userId = session('oauth_user_id');
  46. $token = session('oauth_token');
  47. if (!$userId || !$token) {
  48. return null;
  49. }
  50. $user = User::find($userId);
  51. if (!$user) {
  52. return null;
  53. }
  54. return [
  55. 'id' => $user->user_id,
  56. 'username' => $user->mobile,
  57. 'token' => $token
  58. ];
  59. }
  60. /**
  61. * 检查是否已登录
  62. *
  63. * @return bool
  64. */
  65. public function check(): bool
  66. {
  67. return $this->user() !== null;
  68. }
  69. /**
  70. * 退出登录
  71. *
  72. * @return void
  73. */
  74. public function logout(): void
  75. {
  76. session()->forget(['oauth_user_id', 'oauth_token']);
  77. }
  78. }