discourse/discourse · error · SecondFactor::BadChallenge

second_factor_auth.challenge_not_completed

Error message

second_factor_auth.challenge_not_completed

What it means

Error "second_factor_auth.challenge_not_completed" thrown in discourse/discourse.

Source

Thrown at lib/second_factor/auth_manager.rb:219

      allowed_methods: allowed_methods.to_a,
      generated_at: Time.zone.now.to_i,
      target_user_id: @target_user.id,
    }
    challenge[:description] = config[:description] if config[:description]
    challenge[:redirect_url] = config[:redirect_url] if config[:redirect_url].present?
    server_session["current_second_factor_auth_challenge"] = challenge.to_json
    nonce
  end

  def verify_second_factor_auth_completed(nonce, server_session)
    challenge =
      self.class.find_second_factor_challenge(
        nonce: nonce,
        server_session:,
        target_user: @target_user,
      )
    if !challenge[:successful]
      raise SecondFactor::BadChallenge.new(
              "second_factor_auth.challenge_not_completed",
              status_code: 401,
            )
    end

    server_session.delete("current_second_factor_auth_challenge")
    callback_params = challenge[:callback_params]
    data = @action.second_factor_auth_completed!(callback_params)
    data
  end

  def add_method(id)
    if !@allowed_methods.include?(id)
      @allowed_methods = Set.new(@allowed_methods)
      @allowed_methods.add(id)
      @allowed_methods.freeze
    end
  end

View on GitHub (pinned to 1b2d7253e8)

When it happens

Trigger: Thrown at lib/second_factor/auth_manager.rb:219 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of discourse/discourse@1b2d7253e8 (2026-08-26). Data as JSON: /api/errors/68b102c127385032. Report an issue: GitHub.