hasSession() || ! $request->user()) { return $next($request); } if ($this->guard()->viaRemember()) { $passwordHash = explode('|', $request->cookies->get($this->guard()->getRecallerName()))[2] ?? null; if (! $passwordHash || $passwordHash != $request->user()->getAuthPassword()) { $this->logout($request); } } if (! $request->session()->has('password_hash_'.$this->auth->getDefaultDriver())) { $this->storePasswordHashInSession($request); } if ($request->session()->get('password_hash_'.$this->auth->getDefaultDriver()) !== $request->user( )->getAuthPassword()) { $this->logout($request); } return tap($next($request), function () use ($request) { if (! is_null($this->guard()->user())) { $this->storePasswordHashInSession($request); } }); } /** * Store the user's current password hash in the session. * * @param \Illuminate\Http\Request $request * @return void */ protected function storePasswordHashInSession($request) { if (! $request->user()) { return; } $request->session()->put([ 'password_hash_'.$this->auth->getDefaultDriver() => $request->user()->getAuthPassword(), ]); } /** * Log the user out of the application. * * @param \Illuminate\Http\Request $request * @return void * * @throws \Illuminate\Auth\AuthenticationException */ protected function logout($request) { $this->guard()->logoutCurrentDevice(); $request->session()->flush(); throw new AuthenticationException( 'Unauthenticated.', [$this->auth->getDefaultDriver()], $this->redirectTo($request) ); } /** * Get the guard instance that should be used by the middleware. * * @return \Illuminate\Contracts\Auth\Guard */ protected function guard() { return $this->auth->guard(); } /** * Get the path the user should be redirected to when their session is not authenticated. * * @return string|null */ protected function redirectTo(Request $request) { return null; } public function setLeantimeSession(IncomingRequest $request, Closure $next): Response { if (! $request->hasSession() || ! $request->user()) { session(['userdata' => null]); return $next($request); } $user = $request->user(); // Set up the user session data $currentUser = [ 'id' => (int) $user->id, 'name' => strip_tags($user->firstname), 'profileId' => $user->profileId, 'mail' => filter_var($user->username, FILTER_SANITIZE_EMAIL), 'clientId' => $user->clientId, 'role' => $user->role, 'settings' => $user->settings ? safe_unserialize($user->settings, []) : [], 'twoFAEnabled' => $user->twoFAEnabled ?? false, 'twoFAVerified' => false, 'twoFASecret' => $user->twoFASecret ?? '', 'isExternalAuth' => false, 'createdOn' => ! empty($user->createdOn) ? dtHelper()->parseDbDateTime($user->createdOn) : dtHelper()->userNow(), 'modified' => ! empty($user->modified) ? dtHelper()->parseDbDateTime($user->modified) : dtHelper()->userNow(), ]; session(['userdata' => $currentUser]); return $next($request); } }