1
0

AuthController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace App\Http\Controllers\Api\Client;
  3. use App\Helpers\ClientApiResponse;
  4. use App\Helpers\ResponseEnum;
  5. use App\Services\UserService;
  6. use App\Utils\Helpers;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Routing\Controller;
  10. use Validator;
  11. use function auth;
  12. use function config;
  13. class AuthController extends Controller
  14. {
  15. use ClientApiResponse;
  16. public function __construct(Request $request)
  17. {
  18. if (str_contains($request->userAgent(), 'bob_vpn')) {
  19. $this->setClient('bob');
  20. }
  21. }
  22. public function register(Request $request, UserService $userService): JsonResponse
  23. {
  24. $validator = Validator::make($request->all(), [
  25. 'nickname' => 'required|string|between:2,100',
  26. 'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|max:100|unique:user,username',
  27. 'password' => 'required|string|confirmed|min:6',
  28. ]);
  29. if ($validator->fails()) {
  30. return $this->failed(ResponseEnum::CLIENT_PARAMETER_ERROR, $validator->errors()->all());
  31. }
  32. $data = $validator->validated();
  33. // 创建新用户
  34. if ($user = Helpers::addUser($data['username'], $data['password'], (int) sysConfig('default_traffic'), (int) sysConfig('default_days'), null, $data['nickname'])) {
  35. auth()->login($user, true);
  36. return $this->succeed([
  37. 'token' => $user->createToken('client')->plainTextToken,
  38. 'expire_in' => time() + config('session.lifetime') * Minute,
  39. 'user' => $userService->getProfile(),
  40. ], null, ResponseEnum::USER_SERVICE_REGISTER_SUCCESS);
  41. }
  42. return $this->failed(ResponseEnum::USER_SERVICE_REGISTER_ERROR);
  43. }
  44. public function login(Request $request): JsonResponse
  45. {
  46. if (self::$client === 'bob') {
  47. $rules = [
  48. 'email' => 'required|'.(sysConfig('username_type') ?? 'email'),
  49. 'passwd' => 'required|string|min:6',
  50. ];
  51. } else {
  52. $rules = [
  53. 'username' => 'required|'.(sysConfig('username_type') ?? 'email'),
  54. 'password' => 'required|string|min:6',
  55. ];
  56. }
  57. $validator = Validator::make($request->all(), $rules);
  58. if ($validator->fails()) {
  59. return $this->failed(ResponseEnum::CLIENT_PARAMETER_ERROR, $validator->errors()->all());
  60. }
  61. if (auth()->attempt(['username' => $request->input('username') ?: $request->input('email'), 'password' => $request->input('password') ?: $request->input('passwd')],
  62. true)) {
  63. $user = auth()->user();
  64. if ($user && $user->status === -1) {
  65. return $this->failed(ResponseEnum::CLIENT_HTTP_UNAUTHORIZED_BLACKLISTED);
  66. }
  67. if (self::$client === 'bob') {
  68. $request->session()->put('uid', $user->id);
  69. }
  70. return $this->succeed([
  71. 'token' => $user->createToken('client')->plainTextToken,
  72. 'expire_in' => time() + config('session.lifetime') * Minute,
  73. 'user' => (new UserService)->getProfile(),
  74. ], null, ResponseEnum::USER_SERVICE_LOGIN_SUCCESS);
  75. }
  76. return $this->failed(ResponseEnum::SERVICE_LOGIN_ACCOUNT_ERROR);
  77. }
  78. public function logout(Request $request): JsonResponse
  79. {
  80. auth()->logout();
  81. $request->session()->invalidate();
  82. $request->session()->regenerateToken();
  83. return $this->failed(ResponseEnum::USER_SERVICE_LOGOUT_SUCCESS);
  84. }
  85. }