Мне нужно было включить 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}
, который выглядит как допустимая конфигурация и работает как положено.
Если вы посмотрите исходный код 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 и поискать в сети руководства и образцы.