【发布时间】:2023-03-05 13:59:01
【问题描述】:
我正在使用keyCloakClient.createLoginUrl({locale: locale}) 将我的网络应用程序中的一种选择的语言传递到keycloak 登录用户界面,这会将我正确重定向到:https://localhost/auth/realms/../protocol/openid-connect/auth?....&ui_locales=it。这会在语言环境it 中正确显示内容。
对于登录表单中显示的密码重置链接,我还在 URL 中添加了ui_locales=it,这会将我重定向到:https://localhost/auth/realms/../login-actions/reset-credentials?....&ui_locales=it。这也会在语言环境it 中正确显示内容。
问题:
当我将ui_locales=it 添加到提交重置密码请求的提交网址(${url.loginAction?no_esc} 在login-reset-password.ftl 中,生成网址https://localhost/auth/realms/../login-actions/reset-credentials?..)并提交表单时,我登陆:@ 987654333@。这突然在url中没有ui_locales,因此内容没有在语言环境it中翻译。
为了测试是否有任何魔术重定向,我在启用了保留日志的情况下登录了网络。单击重置密码请求按钮后,它只显示一个新条目:https://localhost/auth/realms/../login-actions/reset-credentials?...&ui_locales=it。
有什么想法吗?
编辑:
将带有错误凭据的登录表单提交到附加 &ui_locales=it 的操作 url (${url.loginAction?no_esc}) 时会发生同样的问题。
似乎区域设置查询参数有一段时间是错误的,请参阅Why are kc_locale and UI lang switch not working?。根据https://www.keycloak.org/docs/latest/release_notes/,9.0 中的区域设置发生了变化,并在9.0.1 中恢复。从那时起,语言环境就没有新的变化。我正在使用12.0.4。
Cookie 方法:
我在我的 React 登录 GUI 上使用 JS 创建了 Cookie KEYCLOAK_LOCALE,并从 URL 传递了区域设置值。它仅在用户第一次登录之前有效。因为那时,Keycloak 以某种方式使用 httpOnly 设置了相同的 Cookie,因此我无法再使用 JS 读取/写入 Cookie 值。所以我无法在新登录时覆盖 Cookie 值,也无法读取 Cookie 值以将其与 React GUI 本地化同步。
-
工作用例:在 App 中选择语言 -> 重定向到 Keycloak 登录 -> 使用 url 中的值设置
KEYCLOAK_LOCALECookie(Keycloak 和 GUI 语言现在保持同步) -> 返回 App ->更改 App 中的语言 -> 重定向到 Keycloak 登录 -> Keycloak 语言可以使用 js 在 Cookie 上更新 因为 Cookie 不是 httpOnly。 -
不工作用例:在应用程序中选择语言 -> 重定向到 Keycloak 登录 -> 使用来自 url 的值设置
KEYCLOAK_LOCALECookie(Keycloak 和 GUI 语言现在保持同步)-> 登录 -> Keycloak 更新Cookie 为 httpOnly -> 发生重定向回 App -> 注销 -> 更改 App 中的语言 -> 重定向到 Keycloak 登录 -> Keycloak 语言无法使用 js 在 Cookie 上更新 因为 Cookie 是 httpOnly强>。
【问题讨论】:
标签: keycloak