Keycloak中“完成注册”信的“欢迎”

Posted

技术标签:

【中文标题】Keycloak中“完成注册”信的“欢迎”【英文标题】:"Welcome" of "Finish registration" letter in Keycloak 【发布时间】:2019-12-15 00:57:57 【问题描述】:

当通过 Keycloak 管理控制台创建用户时,是否可以通过电子邮件通知用户配置文件已创建并且用户可以通过链接完成注册? 目前,只有在创建后为用户设置了密码,用户才能收到有关正在创建的配置文件的电子邮件。并且仅在初次登录尝试之后。但是对于这次登录尝试,用户应该知道设置的密码。

【问题讨论】:

【参考方案1】:

我通过为发送的电子邮件和登录页面自定义 keycloak 主题模板来完成同样的事情。这里是Keycloak docs关于如何自定义主题。

以下是我的具体做法:

首先,我定制了 executeActions.ftl 电子邮件模板,让它变得漂亮,并说“欢迎使用我们的应用程序,单击下面的链接完成您的帐户设置”。我继续使用默认基本模板中的链接和链接到期说明。你可以在https://github.com/keycloak/keycloak/blob/master/themes/src/main/resources/theme/base/email/html/executeActions.ftl看到默认的基本模板

其次,我们决定了新用户“需要”哪些标准 keycloak 操作。我们决定,要完成注册,用户需要执行以下操作:

    接受条款和条件 输入他们的全名(更新他们的个人资料) 设置新密码

第三,我们将 Keycloak 领域设置为要求所有用户完成这 3 个步骤。 在 Keycloak 管理控制台中,我们将这些设置为“必需”操作(在 Configure-->Authentication-->Required Actions 下),将“条款和条件”、“更新配置文件”和“更新密码”操作标记为“启用” ”和“默认操作”。我们还将这些操作按照我们希望它们出现在用户将逐屏浏览的“帐户设置”过程中的确切顺序进行排列。对于其他操作,我们取消选中默认操作。

第四,我自定义了以下呈现帐户设置页面的 keycloak 登录模板。 嵌入在 executeActions 电子邮件中的 keycloak 生成的链接(从第 1 步开始)会将用户带到这些“帐户设置”网页:

info.ftl - 默认为here。单击欢迎电子邮件中的链接后,用户将进入由该模板生成的页面。此页面通常呈现显示各种通用信息消息的网页, 但它也会呈现帐户设置过程的第一页和最后一页。所以我对其进行了修改以检查 message.summary 是否与帐户设置过程的第一步或最后一步匹配。如果这是第一步,我会在页面上呈现“欢迎”文本。如果这是最后一步,我会呈现类似“您的帐户已设置”之类的内容。点击此处登录'。请参阅下文了解我如何修改 info.ftl。
<!-- info.ftl -->
<#import "template.ftl" as layout>
<@layout.registrationLayout displayMessage=false; section>

  <#if section = "header">
    <#if messageHeader??>
      $messageHeader
    <#else>
      <#if message.summary == msg('confirmExecutionOfActions')>
        $kcSanitize(msg('welcomeToOurApplication'))?no_esc
      <#elseif message.summary == msg('accountUpdatedMessage')>
        $kcSanitize(msg('accountSuccessfullySetup'))?no_esc
      <#else>
        $message.summary
      </#if>
    </#if>

  <#elseif section = "form">
    <div id="kc-info-message">
      <div class="kc-info-wrapper">
        <#if message.summary == msg('confirmExecutionOfActions')>
          $kcSanitize(msg('startSettingUpAccount'))?no_esc
        <#elseif message.summary == msg('accountUpdatedMessage')>
          $kcSanitize(msg('accountIsReadyPleaseLogin'))?no_esc
        <#else>
          $message.summary
        </#if>
      </div>

      <#if pageRedirectUri??>

       ... <!-- Omitted the rest because it's the same as the base template -->

我还自定义了以下模板,它们对应于帐户设置过程中的步骤。

terms.ftl - 显示条款和条件步骤 login-update-profile.ftl - 显示用户需要输入/更新他/她的全名的步骤 login-updated-password.ftl - 提示用户更改密码。

第五,当管理员创建新用户时,他/她会触发向用户发送欢迎邮件: - 在 Keycloak 管理控制台中,“添加”新用户后,转到该用户的“凭据”选项卡,在凭据重置下选择“重置操作”下所需的帐户设置操作,然后单击“发送电子邮件”按钮。

无论如何,我希望这会有所帮助。我记得我花了一点时间才弄清楚,因为它不是 keycloak 中的标准流程。

【讨论】:

感谢您如此详细的回复。我也想到了这个流程,但它似乎有点老套,我希望有更好的开箱即用的方法。 我相信你可以使用keycloak api发送验证邮件,这样可能就不需要有人发送邮件了。 是的,可以使用 API 触发电子邮件:keycloak.org/docs-api/11.0/rest-api/index.html 查找 /realm/users/id/execute-actions-email

以上是关于Keycloak中“完成注册”信的“欢迎”的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Keycloak OpenId 客户端的 client_secret

如何为 keycloak 配置数据源以与 galera 集群配合使用?

如何在 Angular 6 中实现 Keycloak?

Keycloak angular 不存在“Access-Control-Allow-Origin”标头

sh 列出代码签名证书 - 来自https://osxdominion.wordpress.com/2015/04/21/signing-mobileconfig-profiles-with-keyc

微商城建设需要多少费用?