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
endView 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.