= Error Reasons

Rodauth allows for customizing response status codes and error
messages for each type of error.  However, in some cases, the
response status code is too coarse for desired error handling
by the application (since many error types use the same status
code), and using the error message is too fragile since it may
be translated.

For this reason, Rodauth associates a fine grained reason for
each type of error.  If an error occurs in Rodauth, it will
call the +set_error_reason+ method with a symbol for the
specific type of error.  By default, this method does not do
anything, but you can use the +set_error_reason+ configuration
method to customize the error handling.

These are the currently supported error type symbols that
Rodauth will call +set_error_reason+ with:

* :account_locked_out
* :already_an_account_with_this_login
* :already_an_unverified_account_with_this_login
* :duplicate_webauthn_id
* :inactive_session
* :invalid_email_auth_key
* :invalid_otp_auth_code
* :invalid_otp_secret
* :invalid_password
* :invalid_password_pattern
* :invalid_phone_number
* :invalid_previous_password
* :invalid_recovery_code
* :invalid_remember_param
* :invalid_reset_password_key
* :invalid_sms_code
* :invalid_sms_confirmation_code
* :invalid_unlock_account_key
* :invalid_verify_account_key
* :invalid_verify_login_change_key
* :invalid_webauthn_auth_param
* :invalid_webauthn_id
* :invalid_webauthn_remove_param
* :invalid_webauthn_setup_param
* :invalid_webauthn_sign_count
* :login_not_valid_email
* :login_required
* :login_too_long
* :login_too_many_bytes
* :login_too_short
* :logins_do_not_match
* :no_current_sms_code
* :no_matching_login
* :not_enough_character_groups_in_password
* :otp_locked_out
* :password_authentication_required
* :password_contains_null_byte
* :password_does_not_meet_requirements
* :password_in_dictionary
* :password_is_one_of_the_most_common
* :password_same_as_previous_password
* :password_too_long
* :password_too_many_bytes
* :password_too_short
* :passwords_do_not_match
* :same_as_current_login
* :same_as_existing_password
* :session_expired
* :sms_already_setup
* :sms_locked_out
* :sms_needs_confirmation
* :sms_not_setup
* :too_many_repeating_characters_in_password
* :two_factor_already_authenticated
* :two_factor_need_authentication
* :two_factor_not_setup
* :unverified_account
* :webauthn_not_setup
