New Universal Login — can I add a custom “Sign up” link/button to my own app page?

Hi team,

Environment
Framework: Next.js (App Router) v15
SDK: @auth0/nextjs-auth0 v4.9.0

We’ve disabled sign-ups on the Database connection (so the Sign up tab is hidden)

What we want
We have a custom signup page in our app (/signup) that does pre-user validation against our backend. We’d like the hosted New Universal Login Provider (login/MFA) to show a link or button that sends users back to our app’s /signup page.

Is there any supported way in New Universal Login provider to add a custom link/button that goes to our app’s /signup?

Hi @akshay3,

You can use partials to modify the New Universal Login Experience.

You can use this to add an HTML label with an href to your /signup page.

If you have any other questions, feel free to reach out!

Have a good one,
Vlad

@vlad.murarasu-

Can you help me with Below error-

What I did

  1. Page Template (Branding API)

I set a minimal NUL page template (has the required tags):

{
“template”: “{%- auth0:head -%}{{ prompt.screen.texts.pageTitle }}{%- auth0:widget -%}”
}

PUT:

PUT /api/v2/branding/templates/universal-login

GET returns:

{“body”:“…{%- auth0:head -%}…{%- auth0:widget -%}…”}

  1. Login Prompt Partials

I added the link to login prompt (single-step screen) at safe slots:

Body sent to:

PUT /api/v2/prompts/login/partials

{
“login”: {
“secondary-actions-end”: “Sign up”,
“form-footer-end”: “Sign up”
}
}

GET returns (verified):

{
“login”: {
“secondary-actions-end”: “<div …>…Sign up…”,
“form-footer-end”: “<div …>…Sign up…”
}
}

Problem(s)

Partial does not render on the login screen (email + password on one page).

I confirmed I’m on the login prompt (not identifier-first).

Hard refresh + Incognito tested.

Hitting the same domain I configured.

When I try to switch Universal Login → Customize authentication screens → login to:

Rendering mode: Advanced mode

Use custom page template: Checked

Advanced mode filters: “Use default UI” (no rows set to Custom UI)

Head Tags: empty
…then clicking Save & Publish shows this error:

Unable to save and publish login. head_tags must contain at least one script tag

Hi @akshay3,

The custom partials are likely not rendering because your minimal page template is missing the required HTML structure to be injected into. The “head_tags” error is a specific validation of the Dashboard UI that can be safely bypassed by performing your customizations exclusively through the Management API.

Two distinct things are happening here:

  1. Partials Not Rendering: You’ve set a minimal custom page template: {%- auth0:head -%}{{ prompt.screen.texts.pageTitle }}{%- auth0:widget -%}. While this works for rendering the core login box (auth0:widget), it omits the surrounding layout and container elements where the partials like secondary-actions-end and form-footer-end are designed to be placed. Without those target “slots” in the HTML, your partial content has nowhere to go.

  2. Dashboard Save Error: Unable to save and publish login. head_tags must contain at least one script tag, a validation rule built into the Auth0 Dashboard UI when you enable “Advanced mode”. The Dashboard requires at least one script tag in that field to prevent accidentally removing essential Auth0 scripts. This error typically happens when you try to use the Dashboard to edit a configuration previously set via the API with different parameters.

The most direct and maintainable solution is to stick with the default page template and use the Management API to inject your custom link. This approach ensures the correct structure and avoids the Dashboard’s UI-specific validation rules. You do not need to use “Advanced mode” for this.

  1. Reset Page Template to Default First, I recommend resetting your Universal Login page template. This will restore the default HTML structure, including all the necessary partials injection points. You can do this with a DELETE request to the Management API.

    • Endpoint: DELETE /api/v2/branding/templates/universal-login
  2. Update Prompt Partials with a Proper Link Now, re-apply your partial, but this time use a complete HTML anchor (<a>) tag pointing to your application’s signup page. Using a single slot, like secondary-actions-end, often provides the cleanest user experience.

    • Endpoint: PUT /api/v2/prompts/login/partials
    • Body:
    {
      "login": {
        "secondary-actions-end": "<a href='https://YOUR_APP_DOMAIN/signup' style='display: block; text-align: center; margin-top: 1rem;'>Need an account? Sign up</a>"
      }
    }
    

    Remember to replace https://YOUR_APP_DOMAIN/signup with the actual URL to your application’s signup page.

After signing up for these two steps, your custom sign-up link should appear correctly on the Universal Login page.

Have a good one,
Vlad

@vlad.murarasu-I followed the exact steps you mentioned above, but I’m getting this error when trying to upload the template:

{“statusCode”:403,“error”:“Forbidden”,“message”:“This feature requires a page template to be configured for the tenant”,“errorCode”:“operation_not_supported”}

This what i got after performing this -DELETE /api/v2/branding/templates/universal-login -

{“statusCode”:404,“error”:“Not Found”,“message”:“Template does not exist.”,“errorCode”:“inexistent_templates_universal_login”}

Could you please help me understand what’s causing this and how I can resolve it?

@vlad.murarasu-Hi,

I added partials to my Universal Login page and I can see the changes when I use Auth0 Dashboard → Authentication → Database → Try. However, when I try to log in through my actual application, I don’t see those changes.

Why would the Universal Login look different between the Dashboard “Try” feature and my application? Am I missing a configuration step to make sure my app uses the updated Universal Login template/partials?

@vlad.murarasu. This above issue is resolved. I configured wrong Auth0 Domain earlier.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.