3.4. テーマの作成
テーマは次のもので構成されます。
- HTML テンプレート (Freemarker テンプレート)
- イメージ
- メッセージバンドル
- スタイルシート
- スクリプト
- テーマのプロパティー
すべてのページを置き換える予定がない限り、別のテーマを拡張することを推奨します。ほとんどの場合、Red Hat build of Keycloak テーマを拡張する必要があると考えられますが、ページのルックアンドフィールを大幅に変更するのであれば基本テーマを拡張することも検討してみてください。基本テーマは主に HTML テンプレートとメッセージバンドルで構成されており、Red Hat build of Keycloak テーマにはイメージとスタイルシートが含まれます。
テーマを拡張する場合は、個別のリソース (テンプレート、スタイルシートなど) をオーバーライドできます。HTML テンプレートの上書きをすることにした場合は、新しいリリースにアップグレードする際にカスタムテンプレートを更新する必要があることに注意してください。
テーマを作成する際に、Red Hat build of Keycloak を再起動せずに themes ディレクトリーから直接テーマリソースを編集できるため、キャッシングを無効にするとを推奨します。
手順
以下のオプションを指定して Keycloak を実行します。
bin/kc.[sh|bat] start --spi-theme-static-max-age=-1 --spi-theme-cache-themes=false --spi-theme-cache-templates=false
bin/kc.[sh|bat] start --spi-theme-static-max-age=-1 --spi-theme-cache-themes=false --spi-theme-cache-templates=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow themesディレクトリーにディレクトリーを作成します。ディレクトリーの名前はテーマの名前になります。たとえば、
mythemeというテーマを作成するには、themes/mythemeディレクトリーを作成します。theme ディレクトリーには、テーマが提供するタイプごとにディレクトリーを作成します。
たとえば、ログインタイプを
mythemeテーマに追加するには、themes/mytheme/loginディレクトリーを作成します。それぞれのタイプに対して、テーマの設定を可能にする
theme.propertiesファイルを作成します。たとえば、作成したテーマ
themes/mytheme/loginを設定して基本テーマを拡張し、いくつかの共通リソースをインポートするには、次の内容でファイルthemes/mytheme/login/theme.propertiesを作成します。parent=base import=common/keycloak
parent=base import=common/keycloakCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、ログインタイプのサポートのあるテーマが作成されました。
- 管理コンソールにログインし、新しいテーマをチェックアウトします。
- レルムを選択します。
- メニューで Realm Settings をクリックします。
- Themes タブをクリックします。
- Login Theme については mytheme を選択し、Save をクリックします。
レルムのログインページを開きます。
これは、アプリケーションからログインするか、Account Management コンソール (
/realms/{realm name}/account) を開いて実行できます。-
親テーマの変更の効果を確認するには、
parent=keycloakintheme.propertiesに設定し、ログインページを更新します。
パフォーマンスに大きく影響するため、必ず実稼働環境でキャッシュを再度有効にしてください。
テーマキャッシュのコンテンツを手動で削除する場合は、サーバーディストリビューションの data/tmp/kc-gzip-cache ディレクトリーを削除することで実行できます。これは、たとえば、以前のサーバー実行の際にテーマのキャッシュを無効にせずにカスタムプロバイダーまたはカスタムテーマを再デプロイした場合に便利です。
3.4.1. テーマのプロパティー リンクのコピーリンクがクリップボードにコピーされました!
テーマプロパティーは、テーマディレクトリーの <THEME TYPE>/theme.properties ファイルで設定されます。
- parent - 拡張する親テーマ
- import - 別のテーマからのリソースのインポート
-
common - 共通リソースパスをオーバーライドします。指定しない場合のデフォルト値は
common/keycloakです。この値は、${url.resourcesCommonPath}の接尾辞の値として、通常、freemarker テンプレートで使用されます (${url.resoucesCommonPath}値の接頭辞はテーマのルート URI です)。 - styles - 追加するスタイルのスペース区切りリスト
- locales - サポートされるロケールのコンマ区切りリスト
特定の要素タイプに使用される css クラスを変更するために使用できるプロパティーのリストがあります。これらのプロパティーのリストは、keycloak テーマ (themes/keycloak/<THEME TYPE>/theme.properties) の対応するタイプの theme.properties ファイルを参照してください。
独自のカスタムプロパティーを追加して、カスタムテンプレートから使用することもできます。
これを行うには、次の形式を使用してシステムプロパティーまたは環境変数を置き換えることができます。
-
${some.system.property}- システムプロパティーの場合。 -
${env.ENV_VAR}- 環境変数の場合。
システムプロパティーまたは環境変数が ${foo:defaultValue} で見つからない場合は、デフォルト値を指定することもできます。
デフォルト値が指定されておらず、対応するシステムプロパティーまたは環境変数がない場合は、何も置き換えられず、テンプレートの形式が使用されることになります。
以下は、実現できる例の一部です。
javaVersion=${java.version}
unixHome=${env.HOME:Unix home not found}
windowsHome=${env.HOMEPATH:Windows home not found}
javaVersion=${java.version}
unixHome=${env.HOME:Unix home not found}
windowsHome=${env.HOMEPATH:Windows home not found}
3.4.2. テーマにスタイルシートを追加 リンクのコピーリンクがクリップボードにコピーされました!
テーマに 1 つ以上のスタイルシートを追加できます。
手順
-
テーマの
<THEME TYPE>/resources/cssディレクトリーにファイルを作成します。 それを
theme.propertiesのstylesプロパティーに追加します。たとえば、
styles.cssをmythemeに追加するには、以下の内容を含むthemes/mytheme/login/resources/css/styles.cssを作成します。.login-pf body { background: DimGrey none; }.login-pf body { background: DimGrey none; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow themes/mytheme/login/theme.propertiesを編集し、以下を追加します。styles=css/styles.css
styles=css/styles.cssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を確認するには、レルムのログインページを開きます。
適用されるスタイルは、カスタムのスタイルシートからのものだけであることに注目してください。
親テーマのスタイルを含めるには、そのテーマのスタイルを読み込みます。
themes/mytheme/login/theme.propertiesを編集し、stylesを次のように変更します。styles=web_modules/@fontawesome/fontawesome-free/css/icons/all.css web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css css/login.css css/styles.css
styles=web_modules/@fontawesome/fontawesome-free/css/icons/all.css web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css css/login.css css/styles.cssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記親スタイルシートのスタイルをオーバーライドするには、スタイルシートが最後にリストされていることを確認してください。
3.4.3. テーマにスクリプトを追加 リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上のスクリプトをテーマに追加できます。
手順
-
テーマの
<THEME TYPE>/resources/jsディレクトリーにファイルを作成します。 ファイルを
theme.propertiesのscriptsプロパティーに追加します。たとえば、
script.jsをmythemeに追加するには、以下の内容でthemes/mytheme/login/resources/js/script.jsを作成します。alert('Hello');alert('Hello');Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次に、
themes/mytheme/login/theme.propertiesを編集し、以下を追加します。scripts=js/script.js
scripts=js/script.jsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.4. テーマにイメージを追加 リンクのコピーリンクがクリップボードにコピーされました!
テーマがイメージを使用できるようにするには、テーマの <THEME TYPE>/resources/img ディレクトリーにイメージを追加します。これらはスタイルシート内から使用することも、HTML テンプレートで直接使用することもできます。
たとえば、イメージを mytheme に追加するには、イメージを themes/mytheme/login/resources/img/image.jpg にイメージをコピーします。
次に、以下を使用して、カスタムスタイルシート内からこのイメージを使用できます。
body {
background-image: url('../img/image.jpg');
background-size: cover;
}
body {
background-image: url('../img/image.jpg');
background-size: cover;
}
または、HTML テンプレートで直接使用するには、以下をカスタム HTML テンプレートに追加します。
<img src="${url.resourcesPath}/img/image.jpg">
<img src="${url.resourcesPath}/img/image.jpg">
3.4.5. メッセージ リンクのコピーリンクがクリップボードにコピーされました!
テンプレートのテキストは、メッセージバンドルからロードされます。別のテーマを拡張するテーマは、親のメッセージバンドルからすべてのメッセージを継承し、<THEME TYPE>/messages/messages_en.properties をテーマに追加して個別のメッセージを上書きできます。
たとえば、ログインフォーム上の Username を、mytheme の Your Username に置き換えるには、以下の内容で themes/mytheme/login/messages/messages_en.properties ファイルを作成します。
usernameOrEmail=Your Username
usernameOrEmail=Your Username
メッセージの使用時に {0} や {1} などのメッセージ値内では引数に置き換えられます。たとえば、Log in to {0} の {0} はレルム名に置き換えられます。
これらのメッセージバンドルのテキストは、レルム固有の値で上書きすることができます。レルム固有の値は、UI や API で管理できます。
3.4.6. レルムに言語を追加 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- レルムの国際化を有効にするには、サーバー管理ガイド を参照してください。
手順
-
テーマのディレクトリーに
<THEME TYPE>/messages/messages_<LOCALE>.propertiesファイルを作成します。 このファイルを
<THEME TYPE>/theme.propertiesのlocalesプロパティーに追加します。言語をユーザーが利用できるようにするには、レルムのlogin、accountおよびemailテーマがその言語をサポートしていなければならないため、これらのテーマタイプに言語を追加する必要があります。たとえば、
mythemeテーマにノルウェー語の翻訳を追加するには、以下の内容でthemes/mytheme/login/messages/messages_no.propertiesファイルを作成します。usernameOrEmail=Brukernavn password=Passord
usernameOrEmail=Brukernavn password=PassordCopy to Clipboard Copied! Toggle word wrap Toggle overflow メッセージの翻訳を省略すると、英語が使用されます。
themes/mytheme/login/theme.propertiesを編集し、以下を追加します。locales=en,no
locales=en,noCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
accountとemailのテーマタイプにも同じものを追加します。そのためには、themes/mytheme/account/messages/messages_no.propertiesおよびthemes/mytheme/email/messages/messages_no.propertiesを作成します。これらのファイルを空のままにすると、英語のメッセージが使用されます。 -
themes/mytheme/login/theme.propertiesをthemes/mytheme/account/theme.propertiesおよびthemes/mytheme/email/theme.propertiesにコピーします。 言語セレクターの翻訳を追加します。これには、英語の翻訳にメッセージを追加します。これには、以下を
themes/mytheme/account/messages/messages_en.propertiesおよびthemes/mytheme/login/messages/messages_en.propertiesに追加します。locale_no=Norsk
locale_no=NorskCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、メッセージプロパティーファイルは ISO-8859-1 を使用してエンコードする必要があります。特別なヘッダーを使用してエンコーディングを指定することもできます。たとえば、UTF-8 エンコーディングを使用するには、次のコマンドを実行します。
encoding: UTF-8
# encoding: UTF-8 usernameOrEmail=....Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.7. カスタムアイデンティティープロバイダーのアイコンの追加 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、ログイン画面に表示されるカスタムアイデンティティープロバイダーのアイコンの追加に対応しています。
手順
-
ログイン
theme.propertiesファイル (themes/mytheme/login/theme.propertiesなど) の中で、キーパターンkcLogoIdP-<alias>でアイコンクラスを定義します。 myProviderというエイリアスを持つ Identity プロバイダーの場合は、カスタムテーマのtheme.propertiesファイルに行を追加できます。以下に例を示します。kcLogoIdP-myProvider = fa fa-lock
kcLogoIdP-myProvider = fa fa-lockCopy to Clipboard Copied! Toggle word wrap Toggle overflow
すべてのアイコンは、PatternFly4 の公式 Web サイトで公開されています。ソーシャルプロバイダー用のアイコンは、ベースとなるログインテーマのプロパティー (themes/keycloak/login/theme.properties) ですでに定義されており、自身で選択することができます。
3.4.8. カスタム HTML テンプレートの作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は Apache Freemarker テンプレートを使用して HTML を生成します。<THEME TYPE>/<TEMPLATE>.ftl を作成して、独自のテーマで個別のテンプレートを上書きできます。使用されるテンプレートのリストは、themes/base/<THEME TYPE> を参照してください。
手順
- テンプレートをベーステーマから独自のテーマにコピーします。
必要な変更を適用します。
たとえば、
mythemeテーマのカスタムログインフォームを作成するには、themes/base/login/login.ftlをthemes/mytheme/loginにコピーし、エディターで開きます。最初の行 (<#import …>) の後に、
<h1>HELLO WORLD!</h1>を以下のように追加します。<#import "template.ftl" as layout> <h1>HELLO WORLD!</h1> ...
<#import "template.ftl" as layout> <h1>HELLO WORLD!</h1> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更したテンプレートをバックアップします。Red Hat build of Keycloak の新しいバージョンにアップグレードする場合は、必要に応じて元のテンプレートに変更を適用できるようにカスタムテンプレートを更新する必要がある可能性があります。
3.4.9. 電子メール リンクのコピーリンクがクリップボードにコピーされました!
パスワードリカバリーメールなどのメールの件名および内容を編集するには、テーマの email タイプにメッセージバンドルをを追加します。メールごとに 3 つのメッセージがあります。このサブジェクトの 1 つ。1 つはプレーンテキストの本文用に、もう 1 つは html 本文用です。
利用可能なすべてのメールを確認するには、themes/base/email/messages/messages_en.properties を確認します。
たとえば、mytheme テーマのパスワードリカバリーメールを変更するには、以下の内容で themes/mytheme/email/messages/messages_en.properties を作成します。
passwordResetSubject=My password recovery
passwordResetBody=Reset password link: {0}
passwordResetBodyHtml=<a href="{0}">Reset password</a>
passwordResetSubject=My password recovery
passwordResetBody=Reset password link: {0}
passwordResetBodyHtml=<a href="{0}">Reset password</a>