Keycloak &引用;“欢迎”;“的;完成注册“;带钥匙斗篷的信

Keycloak &引用;“欢迎”;“的;完成注册“;带钥匙斗篷的信,keycloak,Keycloak,当通过KeyClope管理控制台创建用户时,是否有方法通过电子邮件通知用户已创建配置文件,并且用户可以通过链接完成注册? 目前,只有在创建后为用户设置了密码,用户才能收到有关创建配置文件的电子邮件。并且只有在初次登录尝试之后。但是对于这次登录尝试,用户应该知道设置的密码。我通过为发送的电子邮件和登录页面定制KeyClope主题模板完成了同样的任务。下面是有关如何自定义主题的详细信息 以下是我如何做到这一点的细节: 首先,我定制了executeActions.ftl电子邮件模板,使其美观,并说“欢

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

我通过为发送的电子邮件和登录页面定制KeyClope主题模板完成了同样的任务。下面是有关如何自定义主题的详细信息

以下是我如何做到这一点的细节:

首先,我定制了executeActions.ftl电子邮件模板,使其美观,并说“欢迎使用我们的应用程序,单击下面的链接完成帐户设置”。我继续使用默认基本模板中的链接和链接过期说明。您可以在中看到默认的基础模板

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

  • 接受条款和条件
  • 输入他们的全名(更新他们的个人资料)
  • 设置新密码
  • 第三,我们将KeyClope领域设置为要求所有用户完成这3个步骤。 在KeyClope管理控制台中,我们将这些设置为“必需”操作(在“配置-->身份验证-->必需操作”下),将“条款和条件”、“更新配置文件”和“更新密码”操作标记为“已启用”和“默认操作”。我们还将这些操作按照我们希望它们出现在“帐户设置”过程中的确切顺序进行设置,用户将逐个屏幕地查看这些操作。对于其他操作,我们取消选中默认操作。

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

    • info.ftl-默认为。单击欢迎电子邮件中的链接后,用户将进入此模板生成的页面。此页面通常呈现显示各种通用信息消息的网页, 但它也会呈现帐户设置过程的第一页和最后一页。因此,我对其进行了修改,以检查message.summary是否与帐户设置过程的第一步或最后一步匹配。如果这是第一步,我会在页面上呈现“欢迎”文本。如果这是最后一步,我会呈现类似“您的帐户已设置”的内容。单击此处登录。我是如何修改info.ftl的,请参见下文
    
    ${messageHeader}
    ${kcSanitize(msg('welcomeToOurApplication'))?无
    ${kcSanitize(msg('accountSuccessfullySetup'))?否\u esc}
    ${message.summary}
    ${kcSanitize(msg('startSettingUpAccount'))?否\u esc}
    ${kcSanitize(msg('accountIsReadyPleaseLogin'))?否esc}
    ${message.summary}
    ... 
    
    我还自定义了以下模板,这些模板与帐户设置过程中的步骤相对应

    • 条款。ftl-显示条款和条件步骤
    • 登录更新配置文件。ftl-显示用户需要输入/更新其全名的步骤
    • 登录更新密码。ftl-提示用户更改密码
    第五,当管理员创建新用户时,他/她触发发送给用户的欢迎电子邮件: -在KeyClope管理控制台中,“添加”新用户后,转到该用户的“凭据”选项卡,在凭据重置下选择“重置操作”下所需的帐户设置操作,然后单击“发送电子邮件”按钮


    不管怎样,我希望这有帮助。我记得我花了一点时间才弄清楚,因为这不是KeyClope中的标准流程。

    谢谢您如此详细的回答。我也想到了这个流程,但它似乎有点黑客,我希望有一个更好的方式来做到这一点,开箱即用。我相信你可以使用KeyClope api发送验证电子邮件,这可能会消除有人发送电子邮件的需要。是的,触发电子邮件可以通过api完成:查找
    /{realm}/users/{id}/执行操作电子邮件
    <!-- 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 -->