| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | <?phpnamespace App\Http\Controllers\Api\Client;use App\Helpers\ClientApiResponse;use App\Helpers\ResponseEnum;use App\Services\UserService;use App\Utils\Helpers;use Illuminate\Http\JsonResponse;use Illuminate\Http\Request;use Illuminate\Routing\Controller;use Validator;use function auth;use function config;class AuthController extends Controller{    use ClientApiResponse;    private static $method;    public function __construct(Request $request)    {        if (str_contains($request->userAgent(), 'bob_vpn')) {            $this->setClient('bob');        }    }    public function register(Request $request, UserService $userService): JsonResponse    {        $validator = Validator::make($request->all(), [            'nickname' => 'required|string|between:2,100',            'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|max:100|unique:user,username',            'password' => 'required|string|confirmed|min:6',        ]);        if ($validator->fails()) {            return $this->failed(ResponseEnum::CLIENT_PARAMETER_ERROR, $validator->errors()->all());        }        $data = $validator->validated();        // 创建新用户        if ($user = Helpers::addUser($data['username'], $data['password'], (int) sysConfig('default_traffic'), sysConfig('default_days'), null, $data['nickname'])) {            auth()->login($user, true);            return $this->succeed([                'token' => $user->createToken('client')->plainTextToken,                'expire_in' => time() + config('session.lifetime') * Minute,                'user' => $userService->getProfile(),            ], null, ResponseEnum::USER_SERVICE_REGISTER_SUCCESS);        }        return $this->failed(ResponseEnum::USER_SERVICE_REGISTER_ERROR);    }    public function login(Request $request): JsonResponse    {        if (self::$client === 'bob') {            $rules = [                'email' => 'required|'.(sysConfig('username_type') ?? 'email'),                'passwd' => 'required|string|min:6',            ];        } else {            $rules = [                'username' => 'required|'.(sysConfig('username_type') ?? 'email'),                'password' => 'required|string|min:6',            ];        }        $validator = Validator::make($request->all(), $rules);        if ($validator->fails()) {            return $this->failed(ResponseEnum::CLIENT_PARAMETER_ERROR, $validator->errors()->all());        }        if (auth()->attempt(['username' => $request->input('username') ?: $request->input('email'), 'password' => $request->input('password') ?: $request->input('passwd')],            true)) {            $user = auth()->user();            if ($user && $user->status === -1) {                return $this->failed(ResponseEnum::CLIENT_HTTP_UNAUTHORIZED_BLACKLISTED);            }            if (self::$client === 'bob') {                $request->session()->put('uid', $user->id);            }            return $this->succeed([                'token' => $user->createToken('client')->plainTextToken,                'expire_in' => time() + config('session.lifetime') * Minute,                'user' => (new UserService)->getProfile(),            ], null, ResponseEnum::USER_SERVICE_LOGIN_SUCCESS);        }        return $this->failed(ResponseEnum::SERVICE_LOGIN_ACCOUNT_ERROR);    }    public function logout(Request $request): JsonResponse    {        auth()->logout();        $request->session()->invalidate();        $request->session()->regenerateToken();        return $this->failed(ResponseEnum::USER_SERVICE_LOGOUT_SUCCESS);    }}
 |