Skip to content

selfservice.flows.login.style reverts to identifier_first despite explicitly setting password #441

@pokohide

Description

@pokohide

Preflight checklist

Ory Network Project

https://busy-archimedes-8gobxuzsfx.projects.oryapis.com

Describe the bug

I am using Ory Network and trying to configure the login flow to show both the Email and Password fields immediately (single step).

I have explicitly set selfservice.flows.login.style to password in my configuration file. However, after running ory update identity-config or ory patch identity-config, the configuration either persists as identifier_first or reverts back to it immediately.

The login flow initialization continues to return group: "identifier_first" nodes, and the flow state becomes choose_method, preventing the password field from appearing in the first step.

Reproducing the bug

Identity Schema: I have updated my Identity Schema to remove all references to webauthn and passkeys. Only password is defined in ory.sh/kratos.credentials.

Configuration (kratos.config.yaml): I am trying to apply the following configuration. Note that I need code enabled for Recovery, but I have disabled it for Passwordless Login.

selfservice:
  flows:
    login:
      style: password  # <--- I want this
  methods:
    password:
      enabled: true
    code:
      enabled: true    # Enabled for Recovery
      config:
        passwordless_enabled: false # Disabled for Login to avoid identifier_first
    webauthn:
      enabled: false
    passkey:
      enabled: false

Command Execute.

ory update identity-config --project <MY_PROJECT_ID> --file kratos.config.yaml

Result: The CLI reports Project updated successfully!.

I run ory get identity-config .... Result: The output shows selfservice.flows.login.style: identifier_first. It ignores my setting.

Expected behavior

If selfservice.methods.code.config.passwordless_enabled is set to false, the system should allow selfservice.flows.login.style to be set to password, even if the code method itself is enabled globally (for recovery purposes).

Environment

$ ory version
Version:    v1.2.0
Git Hash:   0e0da3c44491277d0aabeb720dc90e0c046bfc4a
Build Time: 2025-09-25T12:12:40Z

Additional context

It seems like the validation logic on Ory Network forces identifier_first as soon as it sees code.enabled: true, disregarding the passwordless_enabled: false flag or the Identity Schema structure.

Is there any hidden dependency or configuration I am missing to force the "Password" style while keeping "Code" recovery enabled?

Relevant log output

Relevant configuration

Version

v1.2.0

On which operating system are you observing this issue?

None

In which environment are you deploying?

None

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not working.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions