AuthController.php 3.6 KB

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