keycloak~使用自定义的注册页

news/2024/11/15 14:00:30/文章来源:https://www.cnblogs.com/lori/p/18299061

添加FormAction的实现

package org.keycloak.phone.authentication.forms;import org.keycloak.Config;
import org.keycloak.authentication.FormAction;
import org.keycloak.authentication.FormActionFactory;
import org.keycloak.authentication.FormContext;
import org.keycloak.authentication.ValidationContext;
import org.keycloak.forms.login.LoginFormsProvider;
import org.keycloak.models.AuthenticationExecutionModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.provider.ProviderConfigProperty;import java.util.List;// 新版注册
public class RegistrationNew implements FormActionFactory, FormAction {public static final String PROVIDER_ID = "new-registration";private static AuthenticationExecutionModel.Requirement[] REQUIREMENT_CHOICES = {AuthenticationExecutionModel.Requirement.REQUIRED, AuthenticationExecutionModel.Requirement.DISABLED };@Overridepublic String getDisplayType() {return "New Registration Form";}@Overridepublic String getReferenceCategory() {return null;}@Overridepublic boolean isConfigurable() {return false;}@Overridepublic AuthenticationExecutionModel.Requirement[] getRequirementChoices() {return REQUIREMENT_CHOICES;}@Overridepublic boolean isUserSetupAllowed() {return false;}@Overridepublic String getHelpText() {return "New Registration";}@Overridepublic List<ProviderConfigProperty> getConfigProperties() {return null;}@Overridepublic FormAction create(KeycloakSession session) {return this;}@Overridepublic void init(Config.Scope config) {}@Overridepublic void postInit(KeycloakSessionFactory factory) {}@Overridepublic void close() {}@Overridepublic String getId() {return PROVIDER_ID;}// FormAction@Overridepublic void buildPage(FormContext formContext, LoginFormsProvider loginFormsProvider) {}@Overridepublic void validate(ValidationContext validationContext) {validationContext.success();}@Overridepublic void success(FormContext formContext) {}@Overridepublic boolean requiresUser() {return false;}@Overridepublic boolean configuredFor(KeycloakSession keycloakSession, RealmModel realmModel, UserModel userModel) {return true;}@Overridepublic void setRequiredActions(KeycloakSession keycloakSession, RealmModel realmModel, UserModel userModel) {}
}

注意:对于注册来说,他的页面必须是register.ftl,然后在页面上点"注册"按钮,就会触发这个后台绑定的FormAction,页面会在register.ftl上进行渲染.

主要方法的作用

在 Keycloak 中,自定义 FormAction 是用来扩展认证流程的一种方式。其中,successvalidate 是 FormAction 类中的两个方法,具体作用如下:

  • validate 方法:用于验证用户提交的表单数据是否符合要求。在这个方法中,你可以根据自己的逻辑对用户输入的数据进行验证,比如检查用户名是否唯一、密码强度是否符合要求等。如果验证失败,可以通过抛出异常的方式告知用户并阻止继续注册或登录操作。

  • success 方法:在用户提交的表单数据经过验证通过后,success 方法会被调用。在这个方法中,你可以执行注册用户的逻辑,比如将用户信息保存到数据库中、发送确认邮件等操作。同时,你也可以在该方法中设置一些额外的属性或者执行其他自定义的逻辑。

总结来说,validate 方法用于验证用户提交的数据,确保数据的完整性和正确性;而 success 方法则用于处理验证通过后的逻辑,完成用户注册或登录所需的操作。通过这两个方法的配合,你可以实现自定义的注册逻辑,并且确保注册过程的安全性和可靠性。

regsiter.ftl表单

 <div class="login-box"><div class="register-wrap" style=""><div class="login-form"><div class="edit_btn"><form id="kc-form-login" action="${url.registrationAction}" method="post">手机号:<input type="text" name="phoneNumber"><div class="${properties.kcFormGroupClass!}"><div id="kc-form-options" class="${properties.kcFormOptionsClass!}"><div class="${properties.kcFormOptionsWrapperClass!}"><span><a href="${url.loginUrl}">${kcSanitize(msg("backToLogin"))?no_esc}</a></span></div></div><div id="kc-form-buttons" class="${properties.kcFormButtonsClass!}"><input class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonBlockClass!} ${properties.kcButtonLargeClass!}" type="submit" value="${msg("doRegister")}"/></div></div></form></div></div></div></div>

注册SPI,类型为FormActionFactory

配置注册表单

选择新的注册流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/742596.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.1_3_2 三种交换的性能分析

一、电路交换性能分析电路交换主要分为三个部分——连接建立、数据传输、连接释放,电路交换的时间消耗包括:连接建立时间:在通信开始之前必须要在发送方和接收方之间建立一条专用的通信路径,这个过程中电路交换机建立、释放和接收方处理连接请求、返回应答信号都需要时间。…

NAT网络与内网穿透原理

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }NAT 网络地址转换#NAT 网络地址转换原理: 网络地址转换 (NAT) 是一种在数据包通过路由设备传输时,通过修改数据包 IP 报头中的网络地址信…

ThreadPoolExector

Java Thread Pool 使用线程池的好处:减少资源的浪费:创建、销毁、切换线程需要消耗系统资源,通过使用线程池可以降低消耗。 增加可管理度:通过线程池的同一管理,能够实现线程的更好的管理。 提高相应速度:当任务到来时,无需在创建线程,直接就能对任务进行反馈Java线程池…

Windows系统安装RustDesk Server的详细步骤和客户端设置

Windows 安装RustDesk ServerWindows系统安装RustDesk Server的详细步骤 在Windows系统上安装RustDesk Server涉及几个关键步骤,包括安装必要的依赖、下载RustDesk Server程序、配置并启动服务。以下是详细的步骤: 1. 安装Node.js和PM2 RustDesk Server的某些版本可能需要Nod…

Rocky Linux/Redhat8运行Calibre2022报错:Software tree is for environment VCO=aoj

运行出现了错误:virserver.tcl error: ERROR: Current execution environment is VCO=aok. Software tree is for environment VCO=aoj。 即calibre软件版本为aoj,但当前的环境是aok。 从官网查询calibre的roadmap:http://calibre.mentorcloudservices.com/docs/Calibre_OS_…

[深入理解Java虚拟机]高效并发

第12章 Java内存模型与线程 并发处理的广泛应用是Amdahl定律代替摩尔定律[1]成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器。 [1] Amdahl定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力,摩尔定律则用于描述处理器…

使用CDN,给你的网站加速!

使用 CDN,可以大大提高网站的访问速度,提升用户体验使用 CDN,可以大大提高网站的访问速度,提升用户体验 ‍ 在 CDN 出现之前 在介绍 CDN 之前,我想先介绍下没有 CDN 的场景。你搭建了一个网站,配置了域名,这样用户可以通过域名来访问你的网站 当用户多起来后,由于网络带…

PENR论文阅读笔记

Popularity-Enhanced News Recommendation with Multi-View Interest Representation 论文阅读笔记 Abstract 现存的问题: ​ 现有方法通常利用新闻标题、摘要、实体等信息来预测点击率(CTR),或在多任务学习框架中添加一些辅助任务。但是,它们都没有将预测的新闻流行度和用…

易优cms网站prenext 功能:获取当前文档上一篇、下一篇内容-Eyoucms

【基础用法】名称:prenext功能:获取当前文档上一篇、下一篇内容。语法:{eyou:prenext get=pre} <a href="{$field.arcurl}" title="{$field.title}"> 上一篇:{$field.title} </a>{eyou:else /} 上一篇:暂无{/eyou:prenext} {eyou:p…

网络的四层五层七层网络

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }聊聊网络协议参考:https://zhuanlan.zhihu.com/p/665914921 参考:https://blog.csdn.net/weixin_43988680/article/details/123754721 网…

易优cms网站videoplay功能:该标签仅限于视频模型的文档,用于在线播放视频选集列表里的第一个视频-Eyoucms

videoplay 视频在线播放 [基础用法]名称:videoplay功能:该标签仅限于视频模型的文档,用于在线播放视频选集列表里的第一个视频。 (温馨提示:如果一篇视频文档有多个选集视频,可以同时使用【videolist 视频选集列表】标签,进行视频切换播放。)语法:{eyou:videop…

易优cms网站php功能:执行php代码-Eyoucms

[基础用法]名称:php功能:执行php代码语法:{eyou:php}$a = CMS;echo $a;{/eyou:php} 参数:无底层字段:无本文来自博客园,作者:黄文Rex,转载请注明原文链接:https://www.cnblogs.com/hwrex/p/18298818