attributes->set(RecordAuthActivity::AUTH_METHOD_ATTRIBUTE, $method); Session::forget(self::METHOD_SESSION_KEY); Auth::guard('web')->login($user, $remember); Session::regenerate(); $this->recordLogin($user, $request); } /** * Übergabe an Fortifys 2FA-Challenge statt eines direkten Logins. * * @param string|null $intended Landeziel nach bestandener Challenge * (wird von RoleAwareLoginResponse nur * übernommen, wenn der Nutzer es * erreichen darf). */ public function handOffToTwoFactor(Request $request, User $user, string $method, bool $remember = false, ?string $intended = null): void { // Session-Fassade statt $request->session(): auch aus Livewire-Aktionen // (Volt-Login) nutzbar, die denselben Store verwenden. Session::put([ 'login.id' => $user->getKey(), 'login.remember' => $remember, self::METHOD_SESSION_KEY => $method, ]); if ($intended !== null) { Session::put('url.intended', $intended); } Session::regenerate(); } public function recordLogin(User $user, Request $request): void { $user->forceFill([ 'last_login_at' => now(), 'last_login_ip' => $request->ip(), ])->save(); } /** * Anmeldeweg des gerade laufenden Logins: vom einloggenden Code gesetzt, * beim Abschluss der 2FA-Challenge aus der Session, sonst Passwort * (Fortify-/Volt-Login). */ public static function methodOf(Request $request): string { $method = $request->attributes->get(RecordAuthActivity::AUTH_METHOD_ATTRIBUTE); if (is_string($method) && $method !== '') { return $method; } if ($request->routeIs('two-factor.login.store')) { return (string) Session::pull(self::METHOD_SESSION_KEY, 'password'); } return 'password'; } }