Files
zitadel/apps/login/locales/pl.json
Max Peintner 9dc127ddb5 fix(login): Prevent double execution of IDP callback token and improve architecture (#10948)
Closes #10828 

# Which Problems Are Solved

The IDP callback flow was calling retrieveIDPIntent() twice, causing
single-use token failures with error: "Intent Token is invalid". This
occurred due to Next.js 15's dynamicIO feature triggering double renders

# How the Problems Are Solved

Completely refactored the IDP callback architecture to ensure single-use
tokens are consumed exactly once:

- Centralized Business Logic: Moved all IDP callback logic into a single
server action (processIDPCallback) that:
   - Consumes the token once
- Handles all 6 business scenarios (login, linking, auto-linking,
auto-creation, manual registration, account not found)
   - Integrates session creation in the same action
- Returns `{ redirect?: string; error?: string }` for client-side
navigation
- Client Component Invocation: Created `IdpProcessHandler` client
component that:
- Calls the server action from browser context (enables cookie
modification)
   - Prevents double execution with useRef
   - Handles loading states and error display
- Clean Architecture:
   - Removed 403-line success page with complex logic
   - Removed component files from `/components/idps/pages/` folder
   - Moved all UI directly into server pages
   - Created dedicated result pages with minimal params

# Additional Changes

- Added translations to all 8 supported languages

---------

Co-authored-by: Ramon <mail@conblem.me>
2025-10-27 14:34:39 +01:00

441 lines
18 KiB
JSON

{
"common": {
"back": "Powrót",
"title": "Zaloguj się za pomocą Zitadel"
},
"accounts": {
"title": "Konta",
"description": "Wybierz konto, którego chcesz użyć.",
"addAnother": "Dodaj kolejne konto",
"noResults": "Nie znaleziono kont",
"verified": "zweryfikowany",
"expired": "wygasł"
},
"logout": {
"title": "Wyloguj się",
"description": "Wybierz konto, które chcesz usunąć",
"noResults": "Nie znaleziono kont",
"clear": "Usuń sesję",
"verifiedAt": "Ostatnia aktywność: {time}",
"success": {
"title": "Wylogowanie udane",
"description": "Pomyślnie się wylogowałeś."
}
},
"loginname": {
"title": "Witamy ponownie!",
"description": "Wprowadź dane logowania.",
"register": "Zarejestruj nowego użytkownika",
"submit": "Kontynuuj",
"labels": {
"loginname": "Login",
"username": "Nazwa użytkownika",
"usernameOrPhoneNumber": "Nazwa użytkownika lub numer telefonu",
"usernameOrEmail": "Nazwa użytkownika lub e-mail"
},
"required": {
"loginName": "To pole jest wymagane"
},
"errors": {
"internalError": "Wystąpił błąd wewnętrzny",
"couldNotGetLoginSettings": "Nie udało się pobrać ustawień logowania",
"couldNotSearchUsers": "Nie udało się wyszukać użytkowników",
"couldNotGetDomain": "Nie udało się pobrać domeny",
"couldNotGetHost": "Nie udało się pobrać hosta",
"couldNotStartIDPFlow": "Nie udało się rozpocząć procesu IDP",
"moreThanOneUserFound": "Znaleziono więcej niż jednego użytkownika. Podaj unikalny identyfikator.",
"userNotFound": "Użytkownik nie został znaleziony w systemie",
"couldNotCreateSession": "Nie udało się utworzyć sesji dla użytkownika",
"initialUserNotSupported": "Użytkownik inicjalny nie jest obsługiwany",
"usernamePasswordNotAllowed": "Logowanie przy użyciu nazwy użytkownika i hasła jest niedozwolone! Skontaktuj się z administratorem, aby uzyskać więcej informacji.",
"passkeysNotAllowed": "Klucze dostępu są niedozwolone! Skontaktuj się z administratorem, aby uzyskać więcej informacji.",
"couldNotFindIdentityProvider": "Nie udało się znaleźć dostawcy tożsamości.",
"userNotActive": "Użytkownik jest nieaktywny. Skontaktuj się z administratorem, aby uzyskać więcej informacji."
}
},
"zitadel": {
"errors": {
"errorOccured": "Wystąpił błąd",
"multipleUsersFound": "Znaleziono wielu użytkowników",
"userNotFound": "Użytkownik nie został znaleziony w systemie"
}
},
"password": {
"verify": {
"title": "Hasło",
"description": "Wprowadź swoje hasło.",
"resetPassword": "Zresetuj hasło",
"submit": "Kontynuuj",
"labels": {
"password": "Hasło"
},
"required": {
"password": "To pole jest wymagane"
},
"errors": {
"couldNotVerifyPassword": "Nie można zweryfikować hasła",
"couldNotResetPassword": "Nie można zresetować hasła"
},
"info": {
"passwordResetSent": "Hasło zostało zresetowane. Sprawdź swoją pocztę e-mail"
}
},
"set": {
"title": "Ustaw hasło",
"description": "Ustaw hasło dla swojego konta",
"codeSent": "Kod został wysłany na twój adres e-mail.",
"noCodeReceived": "Nie otrzymałeś kodu?",
"resend": "Wyślij kod ponownie",
"submit": "Kontynuuj",
"labels": {
"code": "Kod",
"newPassword": "Nowe hasło",
"confirmPassword": "Potwierdź nowe hasło"
},
"required": {
"code": "To pole jest wymagane",
"newPassword": "Musisz podać hasło!",
"confirmPassword": "To pole jest wymagane"
},
"errors": {
"couldNotSetPassword": "Nie można ustawić hasła",
"couldNotResetPassword": "Nie można zresetować hasła",
"couldNotVerifyPassword": "Nie można zweryfikować hasła"
}
},
"change": {
"title": "Zmień hasło",
"description": "Ustaw nowe hasło dla swojego konta",
"submit": "Kontynuuj",
"labels": {
"newPassword": "Nowe hasło",
"confirmPassword": "Potwierdź nowe hasło"
},
"required": {
"newPassword": "Musisz podać nowe hasło!",
"confirmPassword": "To pole jest wymagane"
},
"errors": {
"couldNotChangePassword": "Nie można zmienić hasła",
"couldNotVerifyPassword": "Nie można zweryfikować hasła",
"unknownError": "Nieznany błąd"
}
},
"complexity": {
"length": "Musi zawierać co najmniej {minLength} znaków.",
"hasSymbol": "Musi zawierać symbol.",
"hasNumber": "Musi zawierać numer.",
"hasUppercase": "Musi zawierać dużą literę.",
"hasLowercase": "Musi zawierać małą literę.",
"equals": "Potwierdzenie hasła pasuje.",
"matches": "Pasuje",
"doesNotMatch": "Nie pasuje"
},
"errors": {
"noHostFound": "Nie znaleziono hosta",
"couldNotSendResetLink": "Nie można wysłać linku do resetowania hasła",
"couldNotCreateSessionForUser": "Nie można utworzyć sesji dla użytkownika",
"couldNotVerifyPassword": "Nie można zweryfikować hasła",
"failedToAuthenticate": "Uwierzytelnianie nie powiodło się. Wykorzystałeś {failedAttempts} z {maxPasswordAttempts} prób wprowadzenia hasła.{lockoutMessage}",
"failedToAuthenticateNoLimit": "Uwierzytelnianie nie powiodło się.",
"accountLockedContactAdmin": " Skontaktuj się z administratorem, aby odblokować konto",
"userNotFound": "Użytkownik nie został znaleziony w systemie",
"initialUserNotSupported": "Użytkownik początkowy nie jest obsługiwany",
"userInitialStateNotSupported": "Początkowy stan użytkownika nie jest obsługiwany",
"codeOrVerificationRequired": "Musisz podać kod lub mieć ważną weryfikację użytkownika",
"verificationRequired": "Wymagana jest weryfikacja użytkownika",
"couldNotLoadSession": "Nie można załadować sesji",
"couldNotLoadAuthMethods": "Nie można załadować metod uwierzytelniania",
"failedPrecondition": "Nie spełniono warunków wstępnych",
"sessionNotValid": "Sesja jest nieważna"
}
},
"idp": {
"title": "Zaloguj się za pomocą SSO",
"description": "Wybierz jednego z poniższych dostawców, aby się zalogować",
"orSignInWith": "lub zaloguj się przez",
"signInWithApple": "Zaloguj się przez Apple",
"signInWithGoogle": "Zaloguj się przez Google",
"signInWithAzureAD": "Zaloguj się przez AzureAD",
"signInWithGithub": "Zaloguj się przez GitHub",
"signInWithGitlab": "Zaloguj się przez GitLab",
"loginError": {
"title": "Logowanie nieudane",
"description": "Wystąpił błąd podczas próby logowania."
},
"linkingError": {
"title": "Powiązanie konta nie powiodło się",
"description": "Wystąpił błąd podczas próby powiązania konta."
},
"completeRegister": {
"title": "Ukończ rejestrację",
"description": "Ukończ rejestrację swojego konta."
},
"accountNotFound": {
"title": "Nie znaleziono konta",
"description": "Nie mogliśmy znaleźć konta powiązanego z danymi logowania Twojego dostawcy tożsamości.",
"info": "Nie znaleziono istniejącego konta. Zaloguj się przy użyciu istniejącego konta lub skontaktuj się z administratorem w celu uzyskania pomocy.",
"backToLogin": "Powrót do logowania"
},
"registrationFailed": {
"title": "Rejestracja niedostępna",
"description": "Nie mogliśmy ukończyć procesu rejestracji.",
"info": "Nie można określić organizacji do rejestracji. Skontaktuj się z administratorem w celu uzyskania pomocy.",
"backToLogin": "Powrót do logowania"
},
"processing": {
"message": "Przetwarzanie uwierzytelniania...",
"noRedirect": "Nie otrzymano przekierowania ani błędu z serwera",
"unexpectedError": "Wystąpił nieoczekiwany błąd"
},
"errors": {
"missingParameters": "Brakuje wymaganych parametrów",
"missingIdpInfo": "Brak informacji IDP",
"idpNotFound": "Dostawca tożsamości nie znaleziony",
"linkingNotAllowed": "Łączenie nie jest dozwolone dla tego dostawcy tożsamości",
"linkingFailed": "Nie udało się połączyć dostawcy tożsamości z kontem",
"autoLinkingFailed": "Nie udało się automatycznie połączyć konta",
"userCreationFailed": "Nie udało się utworzyć konta użytkownika",
"orgResolutionFailed": "Nie można określić organizacji do rejestracji",
"sessionCreationFailed": "Nie można utworzyć sesji lub określić przekierowania",
"unknownError": "Wystąpił nieznany błąd"
}
},
"ldap": {
"title": "Zaloguj się przez LDAP",
"description": "Wprowadź swoje dane logowania LDAP.",
"submit": "Kontynuuj",
"labels": {
"username": "Nazwa użytkownika",
"password": "Hasło"
},
"required": {
"username": "To pole jest wymagane",
"password": "To pole jest wymagane"
}
},
"mfa": {
"verify": {
"title": "Zweryfikuj swoją tożsamość",
"description": "Wybierz jeden z poniższych sposobów weryfikacji.",
"noResults": "Nie znaleziono dostępnych metod uwierzytelniania dwuskładnikowego."
},
"set": {
"title": "Skonfiguruj uwierzytelnianie dwuskładnikowe",
"description": "Wybierz jedną z poniższych metod drugiego czynnika.",
"skip": "Pomiń"
}
},
"otp": {
"verify": {
"title": "Zweryfikuj uwierzytelnianie dwuskładnikowe",
"totpDescription": "Wprowadź kod z aplikacji uwierzytelniającej.",
"smsDescription": "Wprowadź kod otrzymany SMS-em.",
"emailDescription": "Wprowadź kod otrzymany e-mailem.",
"noCodeReceived": "Nie otrzymałeś kodu?",
"resendCode": "Wyślij kod ponownie",
"submit": "Kontynuuj",
"labels": {
"code": "Kod"
},
"required": {
"code": "To pole jest wymagane"
}
},
"set": {
"title": "Skonfiguruj uwierzytelnianie dwuskładnikowe",
"totpDescription": "Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej.",
"smsDescription": "Wprowadź swój numer telefonu, aby otrzymać kod SMS-em.",
"emailDescription": "Wprowadź swój adres e-mail, aby otrzymać kod e-mailem.",
"totpRegisterDescription": "Zeskanuj kod QR lub otwórz adres URL ręcznie.",
"submit": "Kontynuuj",
"labels": {
"code": "Kod"
},
"required": {
"code": "To pole jest wymagane"
}
}
},
"passkey": {
"verify": {
"title": "Uwierzytelnij się za pomocą klucza dostępu",
"description": "Twoje urządzenie poprosi o użycie odcisku palca, rozpoznawania twarzy lub blokady ekranu.",
"usePassword": "Użyj hasła",
"submit": "Kontynuuj"
},
"set": {
"title": "Skonfiguruj klucz dostępu",
"description": "Twoje urządzenie poprosi o użycie odcisku palca, rozpoznawania twarzy lub blokady ekranu.",
"info": {
"description": "Klucz dostępu to metoda uwierzytelniania na urządzeniu, wykorzystująca np. odcisk palca, Apple FaceID lub podobne rozwiązania.",
"link": "Uwierzytelnianie bez hasła"
},
"skip": "Pomiń",
"submit": "Kontynuuj"
}
},
"u2f": {
"verify": {
"title": "Zweryfikuj uwierzytelnianie dwuskładnikowe",
"description": "Zweryfikuj swoje konto za pomocą urządzenia."
},
"set": {
"title": "Skonfiguruj uwierzytelnianie dwuskładnikowe",
"description": "Skonfiguruj urządzenie jako dodatkowy czynnik uwierzytelniania.",
"submit": "Kontynuuj"
}
},
"register": {
"methods": {
"passkey": "Klucz dostępu",
"password": "Hasło"
},
"disabled": {
"title": "Rejestracja wyłączona",
"description": "Rejestracja jest wyłączona. Skontaktuj się z administratorem."
},
"missingdata": {
"title": "Brak danych",
"description": "Podaj e-mail, imię i nazwisko, aby się zarejestrować."
},
"title": "Rejestracja",
"description": "Utwórz konto ZITADEL.",
"noMethodAvailableWarning": "Brak dostępnych metod uwierzytelniania. Skontaktuj się z administratorem.",
"selectMethod": "Wybierz metodę uwierzytelniania, której chcesz użyć",
"agreeTo": "Aby się zarejestrować, musisz zaakceptować warunki korzystania",
"termsOfService": "Regulamin",
"privacyPolicy": "Polityka prywatności",
"submit": "Kontynuuj",
"password": {
"title": "Ustaw hasło",
"description": "Ustaw hasło dla swojego konta",
"submit": "Kontynuuj",
"labels": {
"password": "Hasło",
"confirmPassword": "Potwierdź hasło"
},
"required": {
"password": "Musisz podać hasło!",
"confirmPassword": "To pole jest wymagane"
}
},
"labels": {
"firstname": "Imię",
"lastname": "Nazwisko",
"email": "E-mail"
},
"required": {
"firstname": "To pole jest wymagane",
"lastname": "To pole jest wymagane",
"email": "To pole jest wymagane"
},
"errors": {
"couldNotCreateUser": "Nie udało się utworzyć użytkownika",
"couldNotCreateSession": "Nie udało się utworzyć sesji",
"userNotFound": "Nie znaleziono użytkownika w systemie",
"couldNotLinkIDP": "Nie udało się powiązać IDP z użytkownikiem",
"couldNotRegisterUser": "Nie udało się zarejestrować użytkownika"
}
},
"invite": {
"title": "Zaproś użytkownika",
"description": "Podaj adres e-mail oraz imię i nazwisko użytkownika, którego chcesz zaprosić.",
"info": "Użytkownik otrzyma e-mail z dalszymi instrukcjami.",
"notAllowed": "Twoje ustawienia nie pozwalają na zapraszanie użytkowników.",
"submit": "Kontynuuj",
"success": {
"title": "Użytkownik zaproszony",
"description": "E-mail został pomyślnie wysłany.",
"verified": "Użytkownik został zaproszony i już zweryfikował swój e-mail.",
"notVerifiedYet": "Użytkownik został zaproszony. Otrzyma e-mail z dalszymi instrukcjami.",
"submit": "Zaproś kolejnego użytkownika"
}
},
"signedin": {
"title": "Witaj {user}!",
"description": "Jesteś zalogowany.",
"continue": "Kontynuuj",
"error": {
"title": "Błąd",
"description": "Nie można załadować danych. Sprawdź połączenie z internetem lub spróbuj ponownie później."
}
},
"verify": {
"userIdMissing": "Nie podano identyfikatora użytkownika!",
"successTitle": "Weryfikacja zakończona",
"successDescription": "Użytkownik został pomyślnie zweryfikowany.",
"setupAuthenticator": "Skonfiguruj uwierzytelnianie",
"verify": {
"title": "Zweryfikuj użytkownika",
"description": "Wprowadź kod z wiadomości weryfikacyjnej.",
"noCodeReceived": "Nie otrzymałeś kodu?",
"resendCode": "Wyślij kod ponownie",
"codeSent": "Kod został właśnie wysłany na twój adres e-mail.",
"submit": "Kontynuuj",
"labels": {
"code": "Kod"
},
"required": {
"code": "To pole jest wymagane"
}
},
"errors": {
"couldNotResendEmail": "Nie udało się ponownie wysłać wiadomości e-mail",
"couldNotVerifyUser": "Nie udało się zweryfikować użytkownika",
"couldNotVerifyInvite": "Nie udało się zweryfikować zaproszenia",
"couldNotVerifyEmail": "Nie udało się zweryfikować adresu e-mail",
"couldNotVerify": "Nie udało się zweryfikować",
"couldNotLoadUser": "Nie udało się załadować użytkownika",
"couldNotLoadAuthenticators": "Nie udało się wczytać dostępnych metod uwierzytelniania",
"couldNotCreateSession": "Nie udało się utworzyć sesji",
"noHostFound": "Nie znaleziono hosta",
"userAlreadyVerified": "Użytkownik jest już zweryfikowany!",
"couldNotResendInvite": "Nie udało się ponownie wysłać zaproszenia",
"inviteSendFailed": "Nie udało się wysłać wiadomości e-mail z zaproszeniem",
"emailSendFailed": "Nie udało się wysłać wiadomości e-mail weryfikacyjnej"
}
},
"authenticator": {
"title": "Wybierz metodę uwierzytelniania",
"description": "Wybierz metodę, której chcesz użyć do uwierzytelnienia.",
"noMethodsAvailable": "Brak dostępnych metod uwierzytelniania",
"allSetup": "Już skonfigurowałeś metodę uwierzytelniania!",
"linkWithIDP": "lub połącz z dostawcą tożsamości"
},
"device": {
"usercode": {
"title": "Kod urządzenia",
"description": "Wprowadź kod.",
"submit": "Kontynuuj",
"labels": {
"code": "Kod"
},
"required": {
"code": "To pole jest wymagane"
}
},
"request": {
"title": "{appName} chce się połączyć:",
"description": "{appName} będzie miało dostęp do:",
"disclaimer": "Klikając Zezwól, pozwalasz tej aplikacji i Zitadel na korzystanie z Twoich informacji zgodnie z ich odpowiednimi warunkami użytkowania i politykami prywatności. Możesz cofnąć ten dostęp w dowolnym momencie.",
"submit": "Zezwól",
"deny": "Odmów"
},
"scope": {
"openid": "Zweryfikuj swoją tożsamość.",
"email": "Uzyskaj dostęp do swojego adresu e-mail.",
"profile": "Uzyskaj dostęp do pełnych informacji o swoim profilu.",
"offline_access": "Zezwól na dostęp offline do swojego konta."
}
},
"error": {
"noUserCode": "Nie podano kodu użytkownika!",
"noDeviceRequest": "Nie znaleziono żądania urządzenia.",
"unknownContext": "Nie udało się pobrać kontekstu użytkownika. Upewnij się, że najpierw wprowadziłeś nazwę użytkownika lub podałeś login jako parametr wyszukiwania.",
"sessionExpired": "Twoja sesja wygasła. Zaloguj się ponownie.",
"failedLoading": "Nie udało się załadować danych. Spróbuj ponownie.",
"tryagain": "Spróbuj ponownie"
}
}