mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-13 21:10:57 +00:00
fix(login): allow setting language on registered users (#4862)
* fix: user language for notifications * fix(login): allow setting language on registered users Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/zitadel/oidc/v2/pkg/client/rp"
|
"github.com/zitadel/oidc/v2/pkg/client/rp"
|
||||||
"github.com/zitadel/oidc/v2/pkg/oidc"
|
"github.com/zitadel/oidc/v2/pkg/oidc"
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
|
"golang.org/x/text/language"
|
||||||
|
|
||||||
"github.com/zitadel/zitadel/internal/api/authz"
|
"github.com/zitadel/zitadel/internal/api/authz"
|
||||||
http_mw "github.com/zitadel/zitadel/internal/api/http/middleware"
|
http_mw "github.com/zitadel/zitadel/internal/api/http/middleware"
|
||||||
@@ -314,7 +315,12 @@ func (l *Login) renderExternalNotFoundOption(w http.ResponseWriter, r *http.Requ
|
|||||||
data.ExternalPhone = human.PhoneNumber
|
data.ExternalPhone = human.PhoneNumber
|
||||||
data.ExternalPhoneVerified = human.IsPhoneVerified
|
data.ExternalPhoneVerified = human.IsPhoneVerified
|
||||||
}
|
}
|
||||||
l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalNotFoundOption], data, nil)
|
funcs := map[string]interface{}{
|
||||||
|
"selectedLanguage": func(l string) bool {
|
||||||
|
return data.Language == l
|
||||||
|
},
|
||||||
|
}
|
||||||
|
l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalNotFoundOption], data, funcs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Login) handleExternalNotFoundOptionCheck(w http.ResponseWriter, r *http.Request) {
|
func (l *Login) handleExternalNotFoundOptionCheck(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -420,6 +426,7 @@ func (l *Login) mapExternalNotFoundOptionFormDataToLoginUser(formData *externalN
|
|||||||
IsEmailVerified: isEmailVerified,
|
IsEmailVerified: isEmailVerified,
|
||||||
Phone: formData.Phone,
|
Phone: formData.Phone,
|
||||||
IsPhoneVerified: isPhoneVerified,
|
IsPhoneVerified: isPhoneVerified,
|
||||||
|
PreferredLanguage: language.Make(formData.Language),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,6 +452,7 @@ func (l *Login) mapTokenToLoginUser(tokens *oidc.Tokens, idpConfig *iam_model.ID
|
|||||||
NickName: tokens.IDTokenClaims.GetNickname(),
|
NickName: tokens.IDTokenClaims.GetNickname(),
|
||||||
Email: tokens.IDTokenClaims.GetEmail(),
|
Email: tokens.IDTokenClaims.GetEmail(),
|
||||||
IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(),
|
IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(),
|
||||||
|
PreferredLanguage: tokens.IDTokenClaims.GetLocale(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if tokens.IDTokenClaims.GetPhoneNumber() != "" {
|
if tokens.IDTokenClaims.GetPhoneNumber() != "" {
|
||||||
|
@@ -219,7 +219,13 @@ func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Re
|
|||||||
data.Phone = externalUser.Phone
|
data.Phone = externalUser.Phone
|
||||||
data.ExternalPhone = externalUser.Phone
|
data.ExternalPhone = externalUser.Phone
|
||||||
data.ExternalPhoneVerified = externalUser.IsPhoneVerified
|
data.ExternalPhoneVerified = externalUser.IsPhoneVerified
|
||||||
l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalRegisterOverview], data, nil)
|
|
||||||
|
funcs := map[string]interface{}{
|
||||||
|
"selectedLanguage": func(l string) bool {
|
||||||
|
return data.Language == l
|
||||||
|
},
|
||||||
|
}
|
||||||
|
l.renderer.RenderTemplate(w, r, translator, l.renderer.Templates[tmplExternalRegisterOverview], data, funcs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Login) handleExternalRegisterCheck(w http.ResponseWriter, r *http.Request) {
|
func (l *Login) handleExternalRegisterCheck(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -262,6 +268,7 @@ func (l *Login) mapTokenToLoginHumanAndExternalIDP(tokens *oidc.Tokens, idpConfi
|
|||||||
NickName: tokens.IDTokenClaims.GetNickname(),
|
NickName: tokens.IDTokenClaims.GetNickname(),
|
||||||
Email: tokens.IDTokenClaims.GetEmail(),
|
Email: tokens.IDTokenClaims.GetEmail(),
|
||||||
IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(),
|
IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(),
|
||||||
|
PreferredLanguage: tokens.IDTokenClaims.GetLocale(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if tokens.IDTokenClaims.GetPhoneNumber() != "" {
|
if tokens.IDTokenClaims.GetPhoneNumber() != "" {
|
||||||
|
@@ -21,7 +21,6 @@ type registerFormData struct {
|
|||||||
Firstname string `schema:"firstname"`
|
Firstname string `schema:"firstname"`
|
||||||
Lastname string `schema:"lastname"`
|
Lastname string `schema:"lastname"`
|
||||||
Language string `schema:"language"`
|
Language string `schema:"language"`
|
||||||
Gender int32 `schema:"gender"`
|
|
||||||
Password string `schema:"register-password"`
|
Password string `schema:"register-password"`
|
||||||
Password2 string `schema:"register-password-confirmation"`
|
Password2 string `schema:"register-password-confirmation"`
|
||||||
TermsConfirm bool `schema:"terms-confirm"`
|
TermsConfirm bool `schema:"terms-confirm"`
|
||||||
@@ -167,12 +166,6 @@ func (l *Login) renderRegister(w http.ResponseWriter, r *http.Request, authReque
|
|||||||
}
|
}
|
||||||
return formData.Language == l
|
return formData.Language == l
|
||||||
},
|
},
|
||||||
"selectedGender": func(g int32) bool {
|
|
||||||
if formData == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return formData.Gender == g
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
if authRequest == nil {
|
if authRequest == nil {
|
||||||
l.customTexts(r.Context(), translator, resourceOwner)
|
l.customTexts(r.Context(), translator, resourceOwner)
|
||||||
@@ -187,7 +180,6 @@ func (d registerFormData) toHumanDomain() *domain.Human {
|
|||||||
FirstName: d.Firstname,
|
FirstName: d.Firstname,
|
||||||
LastName: d.Lastname,
|
LastName: d.Lastname,
|
||||||
PreferredLanguage: language.Make(d.Language),
|
PreferredLanguage: language.Make(d.Language),
|
||||||
Gender: domain.Gender(d.Gender),
|
|
||||||
},
|
},
|
||||||
Password: &domain.Password{
|
Password: &domain.Password{
|
||||||
SecretString: d.Password,
|
SecretString: d.Password,
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
{{ .CSRF }}
|
{{ .CSRF }}
|
||||||
|
|
||||||
<input type="hidden" name="authRequestID" value="{{ .AuthReqID }}" />
|
<input type="hidden" name="authRequestID" value="{{ .AuthReqID }}" />
|
||||||
|
<input type="hidden" name="language" value="{{.Language}}" />
|
||||||
|
|
||||||
<div class="lgn-register">
|
<div class="lgn-register">
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user