whereRaw('LOWER(email) = ?', [$email])->first(); if (! $user) { return $this->createUser($provider, $providerId, $email, $name); } $user->forceFill([ 'oauth_provider' => $provider, 'oauth_provider_id' => $providerId, ]); // Noch nicht verifiziert (offener Selbst-Registrierer): der Provider // bestätigt die E-Mail → Onboarding abschließen (aktiv + customer). if ($user->email_verified_at === null) { $user->forceFill([ 'email_verified_at' => now(), 'is_active' => true, ])->save(); if ($user->roles()->doesntExist()) { $this->roleSync->assignRoleAndSyncPermissions($user, 'customer'); } return $user; } // Bereits verifiziert: nur Provider verknüpfen. is_active bleibt // unangetastet (deaktivierte Accounts werden nicht reaktiviert). $user->save(); return $user; } private function createUser(string $provider, string $providerId, string $email, ?string $name): User { $name = $name !== null ? trim($name) : ''; $user = User::create([ 'name' => $name !== '' ? $name : $email, 'email' => $email, 'registration_type' => RegistrationType::Company->value, 'is_active' => true, 'oauth_provider' => $provider, 'oauth_provider_id' => $providerId, ]); $user->forceFill(['email_verified_at' => now()])->save(); $this->roleSync->assignRoleAndSyncPermissions($user, 'customer'); return $user; } }