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:
Max Peintner
2022-12-14 12:23:09 +01:00
committed by GitHub
parent d3e4281bb6
commit 806b9e8238
4 changed files with 18 additions and 10 deletions

View File

@@ -11,6 +11,7 @@ import (
"github.com/zitadel/oidc/v2/pkg/client/rp"
"github.com/zitadel/oidc/v2/pkg/oidc"
"golang.org/x/oauth2"
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/api/authz"
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.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) {
@@ -420,6 +426,7 @@ func (l *Login) mapExternalNotFoundOptionFormDataToLoginUser(formData *externalN
IsEmailVerified: isEmailVerified,
Phone: formData.Phone,
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(),
Email: tokens.IDTokenClaims.GetEmail(),
IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(),
PreferredLanguage: tokens.IDTokenClaims.GetLocale(),
}
if tokens.IDTokenClaims.GetPhoneNumber() != "" {

View File

@@ -219,7 +219,13 @@ func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Re
data.Phone = externalUser.Phone
data.ExternalPhone = externalUser.Phone
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) {
@@ -262,6 +268,7 @@ func (l *Login) mapTokenToLoginHumanAndExternalIDP(tokens *oidc.Tokens, idpConfi
NickName: tokens.IDTokenClaims.GetNickname(),
Email: tokens.IDTokenClaims.GetEmail(),
IsEmailVerified: tokens.IDTokenClaims.IsEmailVerified(),
PreferredLanguage: tokens.IDTokenClaims.GetLocale(),
}
if tokens.IDTokenClaims.GetPhoneNumber() != "" {

View File

@@ -21,7 +21,6 @@ type registerFormData struct {
Firstname string `schema:"firstname"`
Lastname string `schema:"lastname"`
Language string `schema:"language"`
Gender int32 `schema:"gender"`
Password string `schema:"register-password"`
Password2 string `schema:"register-password-confirmation"`
TermsConfirm bool `schema:"terms-confirm"`
@@ -167,12 +166,6 @@ func (l *Login) renderRegister(w http.ResponseWriter, r *http.Request, authReque
}
return formData.Language == l
},
"selectedGender": func(g int32) bool {
if formData == nil {
return false
}
return formData.Gender == g
},
}
if authRequest == nil {
l.customTexts(r.Context(), translator, resourceOwner)
@@ -187,7 +180,6 @@ func (d registerFormData) toHumanDomain() *domain.Human {
FirstName: d.Firstname,
LastName: d.Lastname,
PreferredLanguage: language.Make(d.Language),
Gender: domain.Gender(d.Gender),
},
Password: &domain.Password{
SecretString: d.Password,

View File

@@ -16,6 +16,7 @@
{{ .CSRF }}
<input type="hidden" name="authRequestID" value="{{ .AuthReqID }}" />
<input type="hidden" name="language" value="{{.Language}}" />
<div class="lgn-register">