Skip to content

Dashboard: browser & password-manager autofill disabled on self-hosted sign-in / sign-up forms #12267

Description

@alexkreidler

What's the bug

On the new dashboard (apps/dashboard), the self-hosted login and signup forms cannot be autofilled or saved by browsers or password managers (1Password, Dashlane, and the built-in Chrome/Safari/Firefox managers). Every field is emitted with anti-autofill signals, so:

  • password managers don't offer to fill the email/password on /auth/sign-in, and
  • browsers don't offer to save the credential after a successful login/signup.

This affects the community (email + password → POST /v1/auth/login) and the EE/better-auth self-hosted login forms. It does not affect Novu Cloud, where Clerk renders its own autofill-aware form.

Root cause

The shared Input primitive unconditionally spreads an "autofill off" bundle onto every <input>:

  • apps/dashboard/src/utils/constants.ts
    export const AUTOCOMPLETE_PASSWORD_MANAGERS_OFF = {
      autoComplete: 'off',
      'data-1p-ignore': true,      // 1Password: ignore
      'data-form-type': 'other',   // Dashlane / others: not a login
    };
  • apps/dashboard/src/components/primitives/input.tsx spreads {...AUTOCOMPLETE_PASSWORD_MANAGERS_OFF} onto the underlying input for all callers.

The auth forms use <Input> but never pass their own name / autoComplete, so those off-defaults win:

  • apps/dashboard/src/utils/self-hosted/components.tsx (community SignIn / SignUp)
  • apps/dashboard/src/utils/better-auth/components/sign-in.tsx and sign-up.tsx

Result: the rendered inputs have no name, no autocomplete="current-password" / "email" / "new-password", plus data-1p-ignore and data-form-type="other" — the exact combination that tells browsers and password managers to skip both fill and save.

How it got here

The behavior wasn't intended for the auth forms:

Steps to reproduce

  1. Run a self-hosted dashboard build (VITE_SELF_HOSTED=true).
  2. Open /auth/sign-in with a password manager installed (or rely on the browser's built-in one).
  3. Observe: no autofill suggestion on the email/password fields; after logging in, no "save password" prompt. Same on /auth/sign-up.

Expected behavior

Auth (sign-in / sign-up) fields should be autofillable and saveable by browsers and password managers.

Suggested fix

Exempt the auth inputs from the shared "off" default and give them the standard tokens:

  • Email → name="email" + autoComplete="email" (or "username")
  • Sign-in password → name="password" + autoComplete="current-password"
  • Sign-up password → autoComplete="new-password"
  • On those auth inputs, cancel the manager-off markers (e.g. data-1p-ignore={false}, data-form-type={undefined}), or make primitives/input.tsx not force AUTOCOMPLETE_PASSWORD_MANAGERS_OFF on auth fields.

The workflow-editor / integration-credential use cases that motivated #6975 / #7281 can keep the off-behavior via an opt-in prop, rather than it being the base-component default.

Environment

  • Novu self-hosted, v3.x dashboard (apps/dashboard), community edition (email + password auth).
  • Not applicable to Novu Cloud (Clerk-hosted sign-in).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions