username)->first(); $telephoneId = $user->telephone_id; if ($user->is_online) { return $this->errorResponse(__('messages.user_already_online'), 409); } if ($telephoneId) { $previousOfflineUser = User::where('telephone_id', $telephoneId) ->where('id', '!=', $user->id) ->where('is_online', false) ->first(); if ($previousOfflineUser) { DB::table('sessions') ->where('user_id', $previousOfflineUser->id) ->delete(); } } if ($this->attemptLogin($request)) { $request->session()->regenerate(); $this->updateUserInfo($request); return $this->successResponse(); } return $this->errorResponse(__('messages.invalid_credentials')); } protected function attemptLogin(Request $request): bool { return Auth::guard()->attempt($request->only('username', 'password')); } protected function updateUserInfo(Request $request): void { Auth::user()->update([ 'last_login' => now(), 'telephone_id' => $request->telephone_id, 'is_online' => true ]); DB::table('sessions') ->where('user_id', Auth::id()) ->where('id', '!=', Session::getId()) ->delete(); } public function logout(Request $request): JsonResponse { Auth::user()->update([ 'telephone_id' => null, ]); Auth::guard()->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return $this->successResponse(); } }