Customizing the Keycloak login page
To add a new button with a custom redirect link to Keycloak’s login page, you need to modify the template.ftl file in your custom theme.
The steps below provide a detailed guide on how to achieve this.
This guide is based on Keycloak version 21.1.0.
 | 
Creating a custom theme
- 
Directory structure
- 
Create a directory structure for your custom theme, as depicted below.
Directory structurekeycloak-theme/ ├── themes/ ├── custom-theme/ ├── login/ ├── template.ftl ├── messages_en.properties ├── theme.properties ├── resources/ ├── css/ ├── img/ ├── js/ 
 - 
 - 
Copying the default theme
- 
You can find the default theme files in the Keycloak server distribution under
themes/keycloak/login. - 
Copy the default theme files from the Keycloak distribution to your custom theme directory.
 
 - 
 - 
Editing the
template.ftlfile- 
Open the
template.ftlfile in thecustom-theme/logindirectory. This file contains the HTML structure of the login page. 
 - 
 
Modifying template.ftl to add a new button
- 
Locating the
socialProviderssection- 
Locate the
socialProviderssection of thetemplate.ftlfile where the form is defined.<#nested "socialProviders"> 
 - 
 - 
Adding the new button
- 
Add a new button element below the
socialProviderssection. - 
Extend the button to contain a redirect link to the JCR fallback login:
http://localhost:8080/magnoliaAuthor/.magnolia/jcrlogin. - 
For example, you can add the following code.
<#nested "socialProviders"> <div id="kc-custom-providers" class="${properties.customAdditionalLoginSectionClass!}"> <hr/> <h4>Or login in with</h4> <a id="magnolia-default-login" class="${properties.customAdditionalLoginButtonClass!}" type="button" href="http://localhost:8080/magnoliaAuthor/.magnolia/jcrlogin"> <span>Magnolia ID</span> </a> </div> <#if displayInfo> ... 
 - 
 - 
Adding new theme properties
- 
Add some new properties to the
theme.propertiesfile that are used in the example code above.## Magnolia login customAdditionalLoginSectionClass=kc-social-section kc-social-gray customAdditionalLoginButtonClass=pf-c-button pf-m-control pf-m-block kc-social-item kc-social-gray 
 - 
 
Configuring Keycloak to use the custom theme
- 
Updating the container
- 
Log into the container with its container ID.
docker exec -it <CONTAINER_ID> bin/bash - 
Create a directory for your theme in the container.
mkdir /opt/keycloak/themes/custom-theme - 
Copy the contents of the theme directory from your local machine to the new directory on the running container.
docker cp custom-theme/. <CONTAINER_ID>:/opt/keycloak/themes/custom-theme - 
Restart the container.
docker restart <CONTAINER_ID> 
 - 
 - 
Starting Keycloak
- 
Start the Keycloak container with the updated configuration.
 
 - 
 - 
Setting the custom theme
- 
Log into the Keycloak admin console.
 - 
Go to Realm Settings → Themes.
 - 
For the Login Theme dropdown, select
custom-theme. - 
Save the changes.
 
 - 
 
Verifying your changes
If necessary, restart the Keycloak container and navigate to the login page. You should see the new button with your custom redirect link.

| Download the complete source code for the custom-theme. |