有没有办法从 freemarker 模板中重置当前的身份验证流程?我们有一个复杂的登录过程,具有多个链式身份验证器。大多数身份验证器的质询响应上还有一个
cancel
按钮,目前它是带有 href="${url.loginUrl}"
的锚标记,但单击它并没有达到预期的效果:Keycloak 会记住身份验证会话的状态因此,当前的身份验证器页面只是重新加载,而不是返回到开头。在身份验证器的代码中,可以 context.resetFlow()
恢复身份验证会话的原始状态。 freemarker 也有办法做到这一点吗?
编辑:我当前的解决方案是在模板中使用
href=${url.loginUrl}&reset=true
,并检查身份验证器中的查询参数,然后触发resetFlow
。我想知道是否有更好的方法。
<form id="kc-otp-login-form" class="${properties.kcFormClass!}" action="${url.loginAction}" method="post">
<div id="kc-form-buttons" class="${properties.kcFormButtonsClass!} pf-m-action">
<div class="pf-v5-c-form__actions">
<input class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonBlockClass!} ${properties.kcButtonLargeClass!}" type="submit" value="${kcSanitize(msg("backToLogin"))?no_esc}" />
</div>
</div>
</form>
@Override
public void action(AuthenticationFlowContext context) {
context.resetFlow();
}