Используйте переменную в теме электронного письма Keycloak

Моя текущая установка

  • Keycloak v24.0.5 установлен от Bitnami
  • Кубернетес v1.30.0

Вещи, которые работают

Мне нужно было включить Keycloak username в тело письма. Для этого я создал свой собственный theme и добавил его в /opt/bitnami/keycloak/themes/. Я использовал Dockerfile, чтобы это сработало

FROM docker.io/bitnami/keycloak:24.0.5-debian-12-r1

USER root

COPY my-custom-theme /opt/bitnami/keycloak/themes/my-custom-theme

USER 1001

Модификация файла Keycloak event-update_password.ftl

<#ftl output_format = "plainText">
${msg("eventUpdatePasswordBody",user.getUsername(), event.date, event.ipAddress)}

Модификация файла Keycloak messages_en.properties

eventUpdatePasswordBody=Dear {0} your password was changed on {1} from {2}. If this was not you, please contact an administrator.
eventUpdatePasswordBodyHtml=<p>Dear {0} your password was changed on {1} from {2}. If this was not you, please contact an administrator.</p>

Эта часть работает отлично, так как я могу получить доступ к username с помощью {0} в теле письма.

Вещи, которые не работают

Следующим шагом для меня была попытка использовать тот же подход, чтобы поставить username в теме письма со следующей конфигурацией в messages_en.properties.

eventUpdatePasswordSubject=Update password {0}

Видимо, этот метод не работает по теме, поскольку я получаю электронные письма с заголовком типа

Краткое содержание

Я что-то пропустил или такое использование невозможно даже с помощью шаблона электронной почты? В файле messages_en.properties я вижу identityProviderLinkSubject=Link {0}, который выглядит как допустимая конфигурация и работает как положено.

Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python - это удобный способ автоматизировать процесс отправки электронных писем. Это может быть полезно для...
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы посмотрите исходный код Keycloak, строка, которая запускает отправку электронного письма с темой eventUpdatePasswordSubject:

send(toCamelCase(event.getType()) + "Subject", "event-" + event.getType().toString().toLowerCase() + ".ftl", attributes);

Сравните эту строку со строкой , которая вызывает идентификаторidentProviderLinkSubject , а именно:

send("identityProviderLinkSubject", subjectAttrs, "identity-provider-link.ftl", attributes);

Как видите, строка электронного письма о событии не передает никаких атрибутов, которые нужно включить в строку темы, поэтому невозможно вставить какие-либо значения переменных в строку темы «из коробки».

Однако вы можете отправиться в путешествие по созданию провайдера для расширения Keycloak, используя его функцию SPI, чтобы добавить специальную обработку для eventUpdatePasswordSubject. Вы можете начать свое путешествие с Руководство разработчика сервера Keycloak и поискать в сети руководства и образцы.

Другие вопросы по теме

Похожие вопросы

Учетная запись службы Google OAUTH2 SMTP «555-5.5.2 Синтаксическая ошибка»
Я не хочу, чтобы моя форма электронной почты перенаправлялась на мой php-файл
Статус индивидуального заказа: электронное письмо не отправлено, несмотря на регистрацию действия по электронной почте
Я пытаюсь отправить электронное письмо с помощью Gmail в учетной записи ASP.NET C#, но всегда получаю ошибку
Скрипт приложений, использующий данные из Таблиц, не может быть отправлен из учетной записи Gmail без каких-либо ошибок
Удалить адрес электронной почты с пробелами
PHP-почта в Googlemail. только SPF
Как отправить письмо на несколько адресов электронной почты, чтобы все письма не отображались в разделе «Кому» каждого письма?
Текст в электронном письме в формате HTML не отображается для OL Office 365 для Windows?
Как пометить все электронные письма как прочитанные в определенной папке с помощью фильтра Procmail