rodauth 1.23.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +184 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +221 -79
- data/doc/account_expiration.rdoc +12 -26
- data/doc/active_sessions.rdoc +49 -0
- data/doc/audit_logging.rdoc +44 -0
- data/doc/base.rdoc +76 -128
- data/doc/change_login.rdoc +7 -14
- data/doc/change_password.rdoc +9 -13
- data/doc/change_password_notify.rdoc +2 -2
- data/doc/close_account.rdoc +9 -16
- data/doc/confirm_password.rdoc +12 -5
- data/doc/create_account.rdoc +11 -22
- data/doc/disallow_password_reuse.rdoc +6 -13
- data/doc/email_auth.rdoc +15 -14
- data/doc/email_base.rdoc +5 -15
- data/doc/guides/admin_activation.rdoc +46 -0
- data/doc/guides/already_authenticated.rdoc +10 -0
- data/doc/guides/alternative_login.rdoc +46 -0
- data/doc/guides/create_account_programmatically.rdoc +38 -0
- data/doc/guides/delay_password.rdoc +25 -0
- data/doc/guides/email_only.rdoc +16 -0
- data/doc/guides/i18n.rdoc +26 -0
- data/doc/{internals.rdoc → guides/internals.rdoc} +0 -0
- data/doc/guides/links.rdoc +12 -0
- data/doc/guides/login_return.rdoc +37 -0
- data/doc/guides/password_column.rdoc +25 -0
- data/doc/guides/password_confirmation.rdoc +37 -0
- data/doc/guides/password_requirements.rdoc +30 -0
- data/doc/guides/paths.rdoc +36 -0
- data/doc/guides/query_params.rdoc +9 -0
- data/doc/guides/redirects.rdoc +17 -0
- data/doc/guides/registration_field.rdoc +68 -0
- data/doc/guides/require_mfa.rdoc +30 -0
- data/doc/guides/reset_password_autologin.rdoc +21 -0
- data/doc/guides/status_column.rdoc +28 -0
- data/doc/guides/totp_or_recovery.rdoc +16 -0
- data/doc/http_basic_auth.rdoc +10 -1
- data/doc/jwt.rdoc +22 -22
- data/doc/jwt_cors.rdoc +2 -3
- data/doc/jwt_refresh.rdoc +23 -8
- data/doc/lockout.rdoc +17 -15
- data/doc/login.rdoc +17 -2
- data/doc/login_password_requirements_base.rdoc +18 -37
- data/doc/logout.rdoc +2 -2
- data/doc/otp.rdoc +25 -19
- data/doc/password_complexity.rdoc +10 -26
- data/doc/password_expiration.rdoc +11 -25
- data/doc/password_grace_period.rdoc +16 -2
- data/doc/password_pepper.rdoc +44 -0
- data/doc/recovery_codes.rdoc +18 -12
- data/doc/release_notes/2.0.0.txt +361 -0
- data/doc/release_notes/2.1.0.txt +31 -0
- data/doc/release_notes/2.2.0.txt +39 -0
- data/doc/release_notes/2.3.0.txt +37 -0
- data/doc/release_notes/2.4.0.txt +22 -0
- data/doc/remember.rdoc +40 -64
- data/doc/reset_password.rdoc +12 -9
- data/doc/session_expiration.rdoc +1 -0
- data/doc/single_session.rdoc +16 -25
- data/doc/sms_codes.rdoc +24 -14
- data/doc/two_factor_base.rdoc +60 -22
- data/doc/verify_account.rdoc +14 -12
- data/doc/verify_account_grace_period.rdoc +6 -2
- data/doc/verify_login_change.rdoc +9 -8
- data/doc/webauthn.rdoc +115 -0
- data/doc/webauthn_login.rdoc +15 -0
- data/doc/webauthn_verify_account.rdoc +9 -0
- data/javascript/webauthn_auth.js +45 -0
- data/javascript/webauthn_setup.js +35 -0
- data/lib/roda/plugins/rodauth.rb +1 -1
- data/lib/rodauth.rb +33 -28
- data/lib/rodauth/features/account_expiration.rb +5 -5
- data/lib/rodauth/features/active_sessions.rb +158 -0
- data/lib/rodauth/features/audit_logging.rb +98 -0
- data/lib/rodauth/features/base.rb +152 -49
- data/lib/rodauth/features/change_password_notify.rb +1 -1
- data/lib/rodauth/features/close_account.rb +8 -6
- data/lib/rodauth/features/confirm_password.rb +40 -2
- data/lib/rodauth/features/create_account.rb +8 -13
- data/lib/rodauth/features/disallow_common_passwords.rb +1 -1
- data/lib/rodauth/features/disallow_password_reuse.rb +5 -3
- data/lib/rodauth/features/email_auth.rb +30 -28
- data/lib/rodauth/features/email_base.rb +3 -3
- data/lib/rodauth/features/http_basic_auth.rb +55 -35
- data/lib/rodauth/features/jwt.rb +63 -16
- data/lib/rodauth/features/jwt_cors.rb +15 -15
- data/lib/rodauth/features/jwt_refresh.rb +42 -13
- data/lib/rodauth/features/lockout.rb +11 -13
- data/lib/rodauth/features/login.rb +58 -13
- data/lib/rodauth/features/login_password_requirements_base.rb +13 -8
- data/lib/rodauth/features/otp.rb +76 -82
- data/lib/rodauth/features/password_complexity.rb +8 -13
- data/lib/rodauth/features/password_expiration.rb +1 -1
- data/lib/rodauth/features/password_grace_period.rb +17 -10
- data/lib/rodauth/features/password_pepper.rb +45 -0
- data/lib/rodauth/features/recovery_codes.rb +47 -51
- data/lib/rodauth/features/remember.rb +13 -27
- data/lib/rodauth/features/reset_password.rb +25 -25
- data/lib/rodauth/features/session_expiration.rb +7 -10
- data/lib/rodauth/features/single_session.rb +8 -6
- data/lib/rodauth/features/sms_codes.rb +58 -68
- data/lib/rodauth/features/two_factor_base.rb +134 -30
- data/lib/rodauth/features/verify_account.rb +28 -20
- data/lib/rodauth/features/verify_account_grace_period.rb +18 -9
- data/lib/rodauth/features/verify_login_change.rb +11 -10
- data/lib/rodauth/features/webauthn.rb +505 -0
- data/lib/rodauth/features/webauthn_login.rb +70 -0
- data/lib/rodauth/features/webauthn_verify_account.rb +46 -0
- data/lib/rodauth/migrations.rb +16 -5
- data/lib/rodauth/version.rb +2 -2
- data/templates/button.str +1 -3
- data/templates/change-login.str +1 -2
- data/templates/change-password.str +3 -5
- data/templates/close-account.str +2 -2
- data/templates/confirm-password.str +1 -1
- data/templates/create-account.str +1 -1
- data/templates/email-auth-request-form.str +1 -2
- data/templates/email-auth.str +1 -1
- data/templates/global-logout-field.str +6 -0
- data/templates/login-confirm-field.str +2 -4
- data/templates/login-display.str +3 -2
- data/templates/login-field.str +2 -4
- data/templates/login-form-footer.str +6 -0
- data/templates/login-form.str +7 -0
- data/templates/login.str +1 -9
- data/templates/logout.str +1 -1
- data/templates/multi-phase-login.str +3 -0
- data/templates/otp-auth-code-field.str +5 -3
- data/templates/otp-auth.str +1 -1
- data/templates/otp-disable.str +1 -1
- data/templates/otp-setup.str +3 -3
- data/templates/password-confirm-field.str +2 -4
- data/templates/password-field.str +2 -4
- data/templates/recovery-auth.str +3 -6
- data/templates/recovery-codes.str +1 -1
- data/templates/remember.str +15 -20
- data/templates/reset-password-request.str +2 -2
- data/templates/reset-password.str +1 -2
- data/templates/sms-auth.str +1 -1
- data/templates/sms-code-field.str +5 -3
- data/templates/sms-confirm.str +1 -2
- data/templates/sms-disable.str +1 -2
- data/templates/sms-request.str +1 -1
- data/templates/sms-setup.str +6 -4
- data/templates/two-factor-auth.str +5 -0
- data/templates/two-factor-disable.str +6 -0
- data/templates/two-factor-manage.str +16 -0
- data/templates/unlock-account-request.str +2 -2
- data/templates/unlock-account.str +1 -1
- data/templates/verify-account-resend.str +1 -1
- data/templates/verify-account.str +1 -2
- data/templates/verify-login-change.str +1 -1
- data/templates/webauthn-auth.str +11 -0
- data/templates/webauthn-remove.str +14 -0
- data/templates/webauthn-setup.str +12 -0
- metadata +96 -13
- data/doc/verify_change_login.rdoc +0 -11
- data/lib/rodauth/features/verify_change_login.rb +0 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: db02abed46d2dd511d07e2c8bf8640ca01f14fff595953a3c05b9a2cbe314511
|
|
4
|
+
data.tar.gz: 81f74322d49942d099789350c031c59227ec92b8eb6304dce9b4e15a91f2e60f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bda7da30406c315d6f467ac88701668c5288c93f8415bb1cffa280136cf7838a4fec81e865b8d0e607fef646df5d33a37e96f6e5e00dba2d6956757efc25ffc8
|
|
7
|
+
data.tar.gz: f19903ffb51eb7a87107fe0a24a33214fde275e732a6ac2a41e9bf3409f7b348c2ca8f9f87fe690d8b239fc5ae796f02a36ac32c7f615c8fca25f628d4173a80
|
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,187 @@
|
|
|
1
|
+
=== 2.4.0 (2020-09-21)
|
|
2
|
+
|
|
3
|
+
* Add session_key_prefix for more easily using separate session keys when using multiple configurations (janko) (#121)
|
|
4
|
+
|
|
5
|
+
* Add password_pepper feature for appending a secret key to passwords before they are hashed, supporting secret rotation (janko) (#119)
|
|
6
|
+
|
|
7
|
+
=== 2.3.0 (2020-08-21)
|
|
8
|
+
|
|
9
|
+
* Return an error status instead of an invalid access token when trying to refresh JWT without an access token in the jwt_refresh feature (jeremyevans)
|
|
10
|
+
|
|
11
|
+
* Allow {create,drop}_database_authentication_functions to work with UUID keys (monorkin, janko) (#117)
|
|
12
|
+
|
|
13
|
+
* Add rodauth.login('login_type') for logging in after setting a valid account (janko) (#114)
|
|
14
|
+
|
|
15
|
+
* Make new refresh token available to the after_refresh_token hook by setting it in the response first (jeremyevans)
|
|
16
|
+
|
|
17
|
+
* Make the jwt_refresh plugin call before_jwt_refresh_route hook (previously the configuration method was ignored) (AlexeyMatskevich) (#110)
|
|
18
|
+
|
|
19
|
+
* Add login_email_regexp, login_not_valid_email_message, and log_valid_email? configuration methods (janko) (#107)
|
|
20
|
+
|
|
21
|
+
=== 2.2.0 (2020-07-20)
|
|
22
|
+
|
|
23
|
+
* Allow removing all jwt_refresh tokens when logging out by providing a value of "all" as the token to remove (jeremyevans)
|
|
24
|
+
|
|
25
|
+
* Allow removing specific jwt_refresh token when logging out by providing the token to remove (jeremyevans)
|
|
26
|
+
|
|
27
|
+
* Avoid NoMethodError when checking if session is authenticated when using two factor auth, verify_account_grace_period, and email_auth (jeremyevans) (#105)
|
|
28
|
+
|
|
29
|
+
* Reduce queries in #authenticated? and #require_authentication when using two factor authentication (janko) (#106)
|
|
30
|
+
|
|
31
|
+
* Treat verify_account_email_resend returning false as an error in the verify_account feature (jeremyevans)
|
|
32
|
+
|
|
33
|
+
* Fix use of password_dictionary configuration method in password_complexity feature (jeremyevans)
|
|
34
|
+
|
|
35
|
+
* Remove unnecessary conditionals (jeremyevans)
|
|
36
|
+
|
|
37
|
+
* Add otp_last_use to the otp feature, returning the time of last successful OTP use (jeremyevans) (#103)
|
|
38
|
+
|
|
39
|
+
=== 2.1.0 (2020-06-09)
|
|
40
|
+
|
|
41
|
+
* Do not check CSRF tokens by default for requests using JWT (janko, jeremyevans) (#99)
|
|
42
|
+
|
|
43
|
+
* Use new-password autocomplete value for password field when creating accounts (jeremyevans) (#98)
|
|
44
|
+
|
|
45
|
+
* Consistently use json_response_body for all JSON responses in jwt feature (arthurmmoreira) (#97)
|
|
46
|
+
|
|
47
|
+
* Add check_csrf configuration method to customize CSRF checking (janko) (#96)
|
|
48
|
+
|
|
49
|
+
* Have logged_in? when using http_basic_auth feature check for basic authentication (jeremyevans) (#94)
|
|
50
|
+
|
|
51
|
+
* Don't consider account open if in unverified grace period without password (janko) (#92)
|
|
52
|
+
|
|
53
|
+
=== 2.0.0 (2020-05-06)
|
|
54
|
+
|
|
55
|
+
* Do not show email auth as an option for unverified accounts if using the verify_account_grace_period feature (jeremyevans) (#88)
|
|
56
|
+
|
|
57
|
+
* Generate unlock account key outside of send_unlock_account_email, similar to other email methods (janko) (#89)
|
|
58
|
+
|
|
59
|
+
* Default otp_drift to 30 in the otp feature (jeremyevans)
|
|
60
|
+
|
|
61
|
+
* Add rodauth.require_http_basic_auth to http_basic_auth feature, similar to require_login (janko) (#86)
|
|
62
|
+
|
|
63
|
+
* Rename require_http_basic_auth to require_http_basic_auth? in http_basic_auth feature (janko) (#86)
|
|
64
|
+
|
|
65
|
+
* Change http_basic_auth feature to use rodauth.http_basic_auth for handling basic authentication, similar to rodauth.load_memory (janko) (#86)
|
|
66
|
+
|
|
67
|
+
* Do not call already_logged_in if logged in when accessing verify_login_change page (janko) (#87)
|
|
68
|
+
|
|
69
|
+
* HTML id attributes now use - instead of _ in recovery_codes and remember features (jeremyevans)
|
|
70
|
+
|
|
71
|
+
* Allow *_path and *_url methods to accept a hash of query parameters (janko) (#84)
|
|
72
|
+
|
|
73
|
+
* Use a danger button when closing accounts (janko) (#83)
|
|
74
|
+
|
|
75
|
+
* Handle invalid form inputs in a more bootstrap compatible manner (janko) (#83)
|
|
76
|
+
|
|
77
|
+
* Use standard vertical Bootstrap forms instead of horizontal forms in templates (janko) (#83)
|
|
78
|
+
|
|
79
|
+
* Make templates compatible with Bootstrap 4, and still display correctly with Bootstrap 3 (janko) (#83)
|
|
80
|
+
|
|
81
|
+
* Add check_csrf_opts and check_csrf_block for arguments to the check_csrf! call before Rodauth route dispatching (jeremyevans)
|
|
82
|
+
|
|
83
|
+
* Add audit_logging feature, logging changes to a database table (jeremyevans)
|
|
84
|
+
|
|
85
|
+
* Add hook_action configuration method, called after all before/after hooks (jeremyevans)
|
|
86
|
+
|
|
87
|
+
* Enable email rate limiting by default in lockout, reset_password, and verify_account features (jeremyevans)
|
|
88
|
+
|
|
89
|
+
* Add session_expiration_error_status method to the session_expiration feature, used for JSON requests where session has expired (jeremyevans)
|
|
90
|
+
|
|
91
|
+
* Add domain configuration method to set an explicit domain, instead of relying on the host of the request (jeremyevans)
|
|
92
|
+
|
|
93
|
+
* Add inactive_session_error_status to single_session feature, used for JSON requests where session is no longer active (jeremyevans)
|
|
94
|
+
|
|
95
|
+
* Prevent use of previous JWT access tokens after refresh when using jwt_refresh and active_sessions features (jeremyevans)
|
|
96
|
+
|
|
97
|
+
* Change default setting of jwt_check_accept? from false to true in the jwt feature (jeremyevans)
|
|
98
|
+
|
|
99
|
+
* Automatically check CSRF tokens before calling any Rodauth route by default, allow disabling using check_csrf? false (jeremyevans)
|
|
100
|
+
|
|
101
|
+
* Add translate(key, default_value) configuration method and have it affect all translatable content (jeremyevans)
|
|
102
|
+
|
|
103
|
+
* Add *_page_title configuration methods for all *_view configuration methods (jeremyevans)
|
|
104
|
+
|
|
105
|
+
* Default to using Roda's route_csrf plugin for CSRF support, with :csrf=>:rack_csrf available for using rack_csrf (jeremyevans)
|
|
106
|
+
|
|
107
|
+
* Allow ability for user to fix an incorrect login when requesting a password reset (janko, jeremyevans) (#76)
|
|
108
|
+
|
|
109
|
+
* Add two_factor_auth_return_to_requested_location? to support returning to original page after successful second factor authentication (janko) (#69)
|
|
110
|
+
|
|
111
|
+
* Add login_return_to_requested_location? to support returning to original page after successful login (janko) (#69)
|
|
112
|
+
|
|
113
|
+
* Add rodauth.require_password_authentication method to confirm_password feature (janko, jeremyevans) (#75)
|
|
114
|
+
|
|
115
|
+
* Make remember feature no longer depend on confirm_password (janko) (#79)
|
|
116
|
+
|
|
117
|
+
* Replace {create_account,reset_password_request,verify_account_resend}_link configuration methods with *_link_text (janko) (#77)
|
|
118
|
+
|
|
119
|
+
* Remove remembered_session_key configuration method, no longer needed (janko) (#80)
|
|
120
|
+
|
|
121
|
+
* Add rodauth.possible_authentication_methods for the available authentication methods for the account (jeremyevans)
|
|
122
|
+
|
|
123
|
+
* Add active_sessions feature for disabling session reuse after logout, and allowing global logout of all sessions (jeremyevans)
|
|
124
|
+
|
|
125
|
+
* Add webauthn_verify_account feature for passwordless WebAuthn setup during account verification (jeremyevans)
|
|
126
|
+
|
|
127
|
+
* Allow confirm_password feature to operate as second factor authentication if using webauthn login (jeremyevans)
|
|
128
|
+
|
|
129
|
+
* Add webauthn_login feature for passwordless login via WebAuthn (jeremyevans)
|
|
130
|
+
|
|
131
|
+
* Do not allow two factor authentication using same type as primary authentication (jeremyevans)
|
|
132
|
+
|
|
133
|
+
* Do not require passwords by default if the account does not have a password (jeremyevans)
|
|
134
|
+
|
|
135
|
+
* Remove clear_remembered_session_key and two_factor_session_key configuration methods, no longer needed (jeremyevans)
|
|
136
|
+
|
|
137
|
+
* Store authentication methods used in the session, available via rodauth.authenticated_by (jeremyevans)
|
|
138
|
+
|
|
139
|
+
* Do not require login confirmation by default if verifying accounts or login changes (jeremyevans)
|
|
140
|
+
|
|
141
|
+
* Add mark_input_fields_with_inputmode? and inputmode_for_field? configuration methods for controlling inputmode (jeremyevans)
|
|
142
|
+
|
|
143
|
+
* Support and enable inputmode=numeric attributes by default for otp auth code and sms code fields (jeremyevans)
|
|
144
|
+
|
|
145
|
+
* Add sms_phone_input_type and default to tel instead of using text for SMS phone input (jeremyevans)
|
|
146
|
+
|
|
147
|
+
* Add mark_input_fields_with_autocomplete? and autocomplete_for_field? configuration methods for controlling autocomplete (jeremyevans)
|
|
148
|
+
|
|
149
|
+
* Support and enable autocomplete attributes by default for fields (jeremyevans)
|
|
150
|
+
|
|
151
|
+
* Add login_uses_email? configuration method for whether to treat logins as email addresses (jeremyevans)
|
|
152
|
+
|
|
153
|
+
* Remove the verify change login feature, users should switch to the verify login change feature (jeremyevans)
|
|
154
|
+
|
|
155
|
+
* Change default setting of json_response_success_key to success in the jwt feature (jeremyevans)
|
|
156
|
+
|
|
157
|
+
* Remove deprecated account_model configuration method (jeremyevans)
|
|
158
|
+
|
|
159
|
+
* Remove all deprecated configuration and runtime method aliases in the lockout, verify_account, email_auth, reset_password, and verify_login_change features (jeremyevans)
|
|
160
|
+
|
|
161
|
+
* Remove deprecated before_otp_authentication_route configuration method (jeremyevans)
|
|
162
|
+
|
|
163
|
+
* Change default setting of login_input_type to email if login_column is :email (jeremyevans)
|
|
164
|
+
|
|
165
|
+
* Change default setting of mark_input_fields_as_required? to true (jeremyevans)
|
|
166
|
+
|
|
167
|
+
* Change default setting of verify_account_set_password? in verify_account feature to true (jeremyevans)
|
|
168
|
+
|
|
169
|
+
* Change default setting of json_response_custom_error_status? in jwt feature to true (jeremyevans)
|
|
170
|
+
|
|
171
|
+
* Add auto_add_recovery_codes? configuration method to recovery codes feature, and default to false (jeremyevans)
|
|
172
|
+
|
|
173
|
+
* Add base_url configuration method to set an explicit base for URLs, instead of relying on the base_url of the request (jeremyevans)
|
|
174
|
+
|
|
175
|
+
* Add webauthn feature to handle WebAuthn authentication (jeremyevans)
|
|
176
|
+
|
|
177
|
+
* Fix corner cases when disabling a second factor when multiple second factors have been setup (jeremyevans)
|
|
178
|
+
|
|
179
|
+
* Don't override second factor used to authenticate when setting up additional second factor authentication (jeremyevans)
|
|
180
|
+
|
|
181
|
+
* Add two factor auth, manage, and disable pages (jeremyevans)
|
|
182
|
+
|
|
183
|
+
* Drop support for Ruby 1.8 (jeremyevans)
|
|
184
|
+
|
|
1
185
|
=== 1.23.0 (2020-03-06)
|
|
2
186
|
|
|
3
187
|
* Remove specs from the gem to reduce gem size by over 20% (jeremyevans)
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
= Rodauth
|
|
2
2
|
|
|
3
|
-
Rodauth is
|
|
4
|
-
rack
|
|
5
|
-
be used with other web frameworks, database libraries,
|
|
3
|
+
Rodauth is Ruby's most advanced authentication framework, designed
|
|
4
|
+
to work in any rack application. It's built using Roda and Sequel,
|
|
5
|
+
but it can be used with other web frameworks, database libraries,
|
|
6
|
+
and databases.
|
|
7
|
+
|
|
6
8
|
When used with PostgreSQL, MySQL, and Microsoft SQL Server in the
|
|
7
9
|
default configuration, it offers additional security for password
|
|
8
10
|
hashes by protecting access via database functions.
|
|
9
11
|
|
|
12
|
+
Rodauth supports multiple multifactor authentication methods,
|
|
13
|
+
multiple passwordless authentication methods, and offers both an
|
|
14
|
+
HTML and JSON API for all supported features.
|
|
15
|
+
|
|
10
16
|
== Design Goals
|
|
11
17
|
|
|
12
18
|
* Security: Ship in a maximum security by default configuration
|
|
@@ -26,19 +32,25 @@ hashes by protecting access via database functions.
|
|
|
26
32
|
* Confirm Password
|
|
27
33
|
* Remember (Autologin via token)
|
|
28
34
|
* Lockout (Bruteforce protection)
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
35
|
+
* Audit Logging
|
|
36
|
+
* Email Authentication (Passwordless login via email link)
|
|
37
|
+
* WebAuthn (Multifactor authentication via WebAuthn)
|
|
38
|
+
* WebAuthn Login (Passwordless login via WebAuthn)
|
|
39
|
+
* WebAuthn Verify Account (Passwordless WebAuthn Setup)
|
|
40
|
+
* OTP (Multifactor authentication via TOTP)
|
|
41
|
+
* Recovery Codes (Multifactor authentication via backup codes)
|
|
42
|
+
* SMS Codes (Multifactor authentication via SMS)
|
|
33
43
|
* Verify Login Change (Verify new login before changing login)
|
|
34
44
|
* Verify Account Grace Period (Don't require verification before login)
|
|
35
45
|
* Password Grace Period (Don't require password entry if recently entered)
|
|
36
46
|
* Password Complexity (More sophisticated checks)
|
|
47
|
+
* Password Pepper
|
|
37
48
|
* Disallow Password Reuse
|
|
38
49
|
* Disallow Common Passwords
|
|
39
50
|
* Password Expiration
|
|
40
51
|
* Account Expiration
|
|
41
52
|
* Session Expiration
|
|
53
|
+
* Active Sessions (Prevent session reuse after logout, allow logout of all sessions)
|
|
42
54
|
* Single Session (Only one active session per account)
|
|
43
55
|
* JWT (JSON API support for all other features)
|
|
44
56
|
* JWT Refresh (Access & Refresh Token)
|
|
@@ -58,21 +70,24 @@ IRC :: irc://chat.freenode.net/#rodauth
|
|
|
58
70
|
|
|
59
71
|
== Dependencies
|
|
60
72
|
|
|
61
|
-
There are some dependencies that Rodauth uses
|
|
62
|
-
|
|
63
|
-
gem as it is possible to run without them:
|
|
73
|
+
There are some dependencies that Rodauth uses depending on the
|
|
74
|
+
features in use. These are development dependencies instead of
|
|
75
|
+
runtime dependencies in the gem as it is possible to run without them:
|
|
64
76
|
|
|
65
77
|
tilt :: Used by all features unless in JSON API only mode.
|
|
66
|
-
rack_csrf :: Used
|
|
67
|
-
|
|
68
|
-
|
|
78
|
+
rack_csrf :: Used for CSRF support if the :csrf=>:rack_csrf plugin
|
|
79
|
+
option is given (the default is to use Roda's route_csrf
|
|
80
|
+
plugin, as that allows for more secure request-specific
|
|
81
|
+
tokens).
|
|
69
82
|
bcrypt :: Used by default for password matching, can be skipped
|
|
70
83
|
if password_match? is overridden for custom authentication.
|
|
71
84
|
mail :: Used by default for mailing in the reset password, verify
|
|
72
|
-
account, verify_login_change, change_password_notify,
|
|
73
|
-
lockout features.
|
|
74
|
-
rotp
|
|
85
|
+
account, verify_login_change, change_password_notify,
|
|
86
|
+
lockout, and email_auth features.
|
|
87
|
+
rotp :: Used by the otp feature
|
|
88
|
+
rqrcode :: Used by the otp feature
|
|
75
89
|
jwt :: Used by the jwt feature
|
|
90
|
+
webauthn :: Used by the webauthn feature
|
|
76
91
|
|
|
77
92
|
== Security
|
|
78
93
|
|
|
@@ -143,10 +158,10 @@ function to reduce the risk of timing attacks.
|
|
|
143
158
|
|
|
144
159
|
== HMAC
|
|
145
160
|
|
|
146
|
-
By default, Rodauth does not use HMACs,
|
|
147
|
-
|
|
148
|
-
an HMAC secret will enable HMACs
|
|
149
|
-
below.
|
|
161
|
+
By default, for backwards compatibility, Rodauth does not use HMACs,
|
|
162
|
+
but you are strongly encouraged to use the +hmac_secret+ configuration
|
|
163
|
+
method to set an HMAC secret. Setting an HMAC secret will enable HMACs
|
|
164
|
+
for additional security, as described below.
|
|
150
165
|
|
|
151
166
|
=== email_base feature
|
|
152
167
|
|
|
@@ -213,6 +228,17 @@ to the OTP setup route. This will return an error with the +otp_secret+ and
|
|
|
213
228
|
in the POST request to setup OTP, along with a valid OTP auth code for the
|
|
214
229
|
+otp_secret+.
|
|
215
230
|
|
|
231
|
+
=== webauthn feature
|
|
232
|
+
|
|
233
|
+
Setting +hmac_secret+ is required to use the webauthn feature, as it is
|
|
234
|
+
used for checking that the provided authentication challenges have not
|
|
235
|
+
been modified.
|
|
236
|
+
|
|
237
|
+
=== active_sessions feature
|
|
238
|
+
|
|
239
|
+
Setting +hmac_secret+ is required to use the active_sessions feature,
|
|
240
|
+
as the database stores an HMAC of the active session ID.
|
|
241
|
+
|
|
216
242
|
=== single_session feature
|
|
217
243
|
|
|
218
244
|
Setting +hmac_secret+ will ensure the single session secret set in the
|
|
@@ -406,6 +432,25 @@ Note that these migrations require Sequel 4.35.0+.
|
|
|
406
432
|
end
|
|
407
433
|
end
|
|
408
434
|
|
|
435
|
+
# Used by the audit logging feature
|
|
436
|
+
json_type = case database_type
|
|
437
|
+
when :postgres
|
|
438
|
+
:jsonb
|
|
439
|
+
when :sqlite, :mysql
|
|
440
|
+
:json
|
|
441
|
+
else
|
|
442
|
+
String
|
|
443
|
+
end
|
|
444
|
+
create_table(:account_authentication_audit_logs) do
|
|
445
|
+
primary_key :id, :type=>:Bignum
|
|
446
|
+
foreign_key :account_id, :accounts, :null=>false, :type=>:Bignum
|
|
447
|
+
DateTime :at, :null=>false, :default=>Sequel::CURRENT_TIMESTAMP
|
|
448
|
+
String :message, :null=>false
|
|
449
|
+
column :metadata, json_type
|
|
450
|
+
index [:account_id, :at], :name=>:audit_account_at_idx
|
|
451
|
+
index :at, :name=>:audit_at_idx
|
|
452
|
+
end
|
|
453
|
+
|
|
409
454
|
# Used by the password reset feature
|
|
410
455
|
create_table(:account_password_reset_keys) do
|
|
411
456
|
foreign_key :id, :accounts, :primary_key=>true, :type=>:Bignum
|
|
@@ -417,9 +462,10 @@ Note that these migrations require Sequel 4.35.0+.
|
|
|
417
462
|
# Used by the jwt refresh feature
|
|
418
463
|
create_table(:account_jwt_refresh_keys) do
|
|
419
464
|
primary_key :id, :type=>:Bignum
|
|
420
|
-
foreign_key :account_id, :accounts, :type=>:Bignum
|
|
465
|
+
foreign_key :account_id, :accounts, :null=>false, :type=>:Bignum
|
|
421
466
|
String :key, :null=>false
|
|
422
467
|
DateTime :deadline, deadline_opts[1]
|
|
468
|
+
index :account_id, :name=>:account_jwt_rk_account_id_idx
|
|
423
469
|
end
|
|
424
470
|
|
|
425
471
|
# Used by the account verification feature
|
|
@@ -485,6 +531,29 @@ Note that these migrations require Sequel 4.35.0+.
|
|
|
485
531
|
String :key, :null=>false
|
|
486
532
|
end
|
|
487
533
|
|
|
534
|
+
# Used by the active sessions feature
|
|
535
|
+
create_table(:account_active_session_keys) do
|
|
536
|
+
foreign_key :account_id, :accounts, :type=>:Bignum
|
|
537
|
+
String :session_id
|
|
538
|
+
Time :created_at, :null=>false, :default=>Sequel::CURRENT_TIMESTAMP
|
|
539
|
+
Time :last_use, :null=>false, :default=>Sequel::CURRENT_TIMESTAMP
|
|
540
|
+
primary_key [:account_id, :session_id]
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
# Used by the webauthn feature
|
|
544
|
+
create_table(:account_webauthn_user_ids) do
|
|
545
|
+
foreign_key :id, :accounts, :primary_key=>true, :type=>:Bignum
|
|
546
|
+
String :webauthn_id, :null=>false
|
|
547
|
+
end
|
|
548
|
+
create_table(:account_webauthn_keys) do
|
|
549
|
+
foreign_key :account_id, :accounts, :type=>:Bignum
|
|
550
|
+
String :webauthn_id
|
|
551
|
+
String :public_key, :null=>false
|
|
552
|
+
Integer :sign_count, :null=>false
|
|
553
|
+
Time :last_use, :null=>false, :default=>Sequel::CURRENT_TIMESTAMP
|
|
554
|
+
primary_key [:account_id, :webauthn_id]
|
|
555
|
+
end
|
|
556
|
+
|
|
488
557
|
# Used by the otp feature
|
|
489
558
|
create_table(:account_otp_keys) do
|
|
490
559
|
foreign_key :id, :accounts, :primary_key=>true, :type=>:Bignum
|
|
@@ -519,22 +588,26 @@ Note that these migrations require Sequel 4.35.0+.
|
|
|
519
588
|
else
|
|
520
589
|
get(Sequel.function(:DB_NAME))
|
|
521
590
|
end
|
|
522
|
-
run "GRANT
|
|
523
|
-
run "GRANT
|
|
524
|
-
run "GRANT
|
|
525
|
-
run "GRANT
|
|
526
|
-
run "GRANT
|
|
527
|
-
run "GRANT
|
|
528
|
-
run "GRANT
|
|
529
|
-
run "GRANT
|
|
530
|
-
run "GRANT
|
|
531
|
-
run "GRANT
|
|
532
|
-
run "GRANT
|
|
533
|
-
run "GRANT
|
|
534
|
-
run "GRANT
|
|
535
|
-
run "GRANT
|
|
536
|
-
run "GRANT
|
|
537
|
-
run "GRANT
|
|
591
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_statuses TO #{user}"
|
|
592
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON accounts TO #{user}"
|
|
593
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_authentication_audit_logs TO #{user}"
|
|
594
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_password_reset_keys TO #{user}"
|
|
595
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_jwt_refresh_keys TO #{user}"
|
|
596
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_verification_keys TO #{user}"
|
|
597
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_login_change_keys TO #{user}"
|
|
598
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_remember_keys TO #{user}"
|
|
599
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_login_failures TO #{user}"
|
|
600
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_email_auth_keys TO #{user}"
|
|
601
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_lockouts TO #{user}"
|
|
602
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_password_change_times TO #{user}"
|
|
603
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_activity_times TO #{user}"
|
|
604
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_session_keys TO #{user}"
|
|
605
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_active_session_keys TO #{user}"
|
|
606
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_webauthn_user_ids TO #{user}"
|
|
607
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_webauthn_keys TO #{user}"
|
|
608
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_otp_keys TO #{user}"
|
|
609
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_recovery_codes TO #{user}"
|
|
610
|
+
run "GRANT SELECT, INSERT, UPDATE, DELETE ON account_sms_codes TO #{user}"
|
|
538
611
|
end
|
|
539
612
|
end
|
|
540
613
|
|
|
@@ -542,7 +615,10 @@ Note that these migrations require Sequel 4.35.0+.
|
|
|
542
615
|
drop_table(:account_sms_codes,
|
|
543
616
|
:account_recovery_codes,
|
|
544
617
|
:account_otp_keys,
|
|
618
|
+
:account_webauthn_keys,
|
|
619
|
+
:account_webauthn_user_ids,
|
|
545
620
|
:account_session_keys,
|
|
621
|
+
:account_active_session_keys,
|
|
546
622
|
:account_activity_times,
|
|
547
623
|
:account_password_change_times,
|
|
548
624
|
:account_email_auth_keys,
|
|
@@ -553,6 +629,7 @@ Note that these migrations require Sequel 4.35.0+.
|
|
|
553
629
|
:account_verification_keys,
|
|
554
630
|
:account_jwt_refresh_keys,
|
|
555
631
|
:account_password_reset_keys,
|
|
632
|
+
:account_authentication_audit_logs,
|
|
556
633
|
:accounts,
|
|
557
634
|
:account_statuses)
|
|
558
635
|
end
|
|
@@ -644,7 +721,8 @@ for the password user using Sequel's migration API:
|
|
|
644
721
|
|
|
645
722
|
If the database is not PostgreSQL, MySQL, or Microsoft SQL Server, or you
|
|
646
723
|
cannot use multiple user accounts, just combine the two migrations into a
|
|
647
|
-
single migration
|
|
724
|
+
single migration, removing all the code related to database permissions
|
|
725
|
+
and database functions.
|
|
648
726
|
|
|
649
727
|
One thing to notice in the above migrations is that Rodauth uses additional
|
|
650
728
|
tables for additional features, instead of additional columns in a single
|
|
@@ -761,10 +839,8 @@ should be flexible enough to integrate into most legacy systems.
|
|
|
761
839
|
When loading the rodauth plugin, you can also pass an options hash,
|
|
762
840
|
which configures which dependent plugins should be loaded. Options:
|
|
763
841
|
|
|
764
|
-
:csrf :: Set to +false+ to not load a csrf plugin. Set to +:
|
|
765
|
-
to use the
|
|
766
|
-
recommended to set the +:route_csrf+ option as that allows
|
|
767
|
-
for more secure request-specific CSRF tokens.
|
|
842
|
+
:csrf :: Set to +false+ to not load a csrf plugin. Set to +:rack_csrf+
|
|
843
|
+
to use the csrf plugin instead of the route_csrf plugin.
|
|
768
844
|
:flash :: Set to +false+ to not load the flash plugin
|
|
769
845
|
:json :: Set to +true+ to load the json and json_parser plugins. Set
|
|
770
846
|
to +:only+ to only load those plugins and not any other plugins.
|
|
@@ -783,42 +859,47 @@ view the appropriate file in the doc directory.
|
|
|
783
859
|
* {Login Password Requirements Base}[rdoc-ref:doc/login_password_requirements_base.rdoc] (this feature is autoloaded by features that set logins/passwords)
|
|
784
860
|
* {Email Base}[rdoc-ref:doc/email_base.rdoc] (this feature is autoloaded by features that send email)
|
|
785
861
|
* {Two Factor Base}[rdoc-ref:doc/two_factor_base.rdoc] (this feature is autoloaded by 2 factor authentication features)
|
|
786
|
-
* {
|
|
787
|
-
* {
|
|
862
|
+
* {Account Expiration}[rdoc-ref:doc/account_expiration.rdoc]
|
|
863
|
+
* {Active Sessions}[rdoc-ref:doc/active_sessions.rdoc]
|
|
864
|
+
* {Audit Logging}[rdoc-ref:doc/audit_logging.rdoc]
|
|
865
|
+
* {Change Login}[rdoc-ref:doc/change_login.rdoc]
|
|
788
866
|
* {Change Password}[rdoc-ref:doc/change_password.rdoc]
|
|
789
867
|
* {Change Password Notify}[rdoc-ref:doc/change_password_notify.rdoc]
|
|
790
|
-
* {Change Login}[rdoc-ref:doc/change_login.rdoc]
|
|
791
|
-
* {Reset Password}[rdoc-ref:doc/reset_password.rdoc]
|
|
792
|
-
* {Create Account}[rdoc-ref:doc/create_account.rdoc]
|
|
793
868
|
* {Close Account}[rdoc-ref:doc/close_account.rdoc]
|
|
794
|
-
* {Verify Account}[rdoc-ref:doc/verify_account.rdoc]
|
|
795
869
|
* {Confirm Password}[rdoc-ref:doc/confirm_password.rdoc]
|
|
796
|
-
* {
|
|
797
|
-
* {
|
|
870
|
+
* {Create Account}[rdoc-ref:doc/create_account.rdoc]
|
|
871
|
+
* {Disallow Common Passwords}[rdoc-ref:doc/disallow_common_passwords.rdoc]
|
|
872
|
+
* {Disallow Password Reuse}[rdoc-ref:doc/disallow_password_reuse.rdoc]
|
|
798
873
|
* {Email Authentication}[rdoc-ref:doc/email_auth.rdoc]
|
|
874
|
+
* {HTTP Basic Auth}[rdoc-ref:doc/http_basic_auth.rdoc]
|
|
875
|
+
* {JWT CORS}[rdoc-ref:doc/jwt_cors.rdoc]
|
|
876
|
+
* {JWT Refresh}[rdoc-ref:doc/jwt_refresh.rdoc]
|
|
877
|
+
* {JWT}[rdoc-ref:doc/jwt.rdoc]
|
|
878
|
+
* {Lockout}[rdoc-ref:doc/lockout.rdoc]
|
|
879
|
+
* {Login}[rdoc-ref:doc/login.rdoc]
|
|
880
|
+
* {Logout}[rdoc-ref:doc/logout.rdoc]
|
|
799
881
|
* {OTP}[rdoc-ref:doc/otp.rdoc]
|
|
800
|
-
* {Recovery Codes}[rdoc-ref:doc/recovery_codes.rdoc]
|
|
801
|
-
* {SMS Codes}[rdoc-ref:doc/sms_codes.rdoc]
|
|
802
|
-
* {Verify Login Change}[rdoc-ref:doc/verify_login_change.rdoc]
|
|
803
|
-
* {Verify Change Login}[rdoc-ref:doc/verify_change_login.rdoc]
|
|
804
|
-
* {Verify Account Grace Period}[rdoc-ref:doc/verify_account_grace_period.rdoc]
|
|
805
|
-
* {Password Grace Period}[rdoc-ref:doc/password_grace_period.rdoc]
|
|
806
882
|
* {Password Complexity}[rdoc-ref:doc/password_complexity.rdoc]
|
|
807
|
-
* {Disallow Password Reuse}[rdoc-ref:doc/disallow_password_reuse.rdoc]
|
|
808
|
-
* {Disallow Common Passwords}[rdoc-ref:doc/disallow_common_passwords.rdoc]
|
|
809
|
-
* {Update Password Hash}[rdoc-ref:doc/update_password_hash.rdoc]
|
|
810
883
|
* {Password Expiration}[rdoc-ref:doc/password_expiration.rdoc]
|
|
811
|
-
* {
|
|
884
|
+
* {Password Grace Period}[rdoc-ref:doc/password_grace_period.rdoc]
|
|
885
|
+
* {Password Pepper}[rdoc-ref:doc/password_pepper.rdoc]
|
|
886
|
+
* {Recovery Codes}[rdoc-ref:doc/recovery_codes.rdoc]
|
|
887
|
+
* {Remember}[rdoc-ref:doc/remember.rdoc]
|
|
888
|
+
* {Reset Password}[rdoc-ref:doc/reset_password.rdoc]
|
|
812
889
|
* {Session Expiration}[rdoc-ref:doc/session_expiration.rdoc]
|
|
813
890
|
* {Single Session}[rdoc-ref:doc/single_session.rdoc]
|
|
814
|
-
* {
|
|
815
|
-
* {
|
|
816
|
-
* {
|
|
817
|
-
* {
|
|
891
|
+
* {SMS Codes}[rdoc-ref:doc/sms_codes.rdoc]
|
|
892
|
+
* {Update Password Hash}[rdoc-ref:doc/update_password_hash.rdoc]
|
|
893
|
+
* {Verify Account}[rdoc-ref:doc/verify_account.rdoc]
|
|
894
|
+
* {Verify Account Grace Period}[rdoc-ref:doc/verify_account_grace_period.rdoc]
|
|
895
|
+
* {Verify Login Change}[rdoc-ref:doc/verify_login_change.rdoc]
|
|
896
|
+
* {WebAuthn}[rdoc-ref:doc/webauthn.rdoc]
|
|
897
|
+
* {WebAuthn Login}[rdoc-ref:doc/webauthn_login.rdoc]
|
|
898
|
+
* {WebAuthn Verify Account}[rdoc-ref:doc/webauthn_verify_account.rdoc]
|
|
818
899
|
|
|
819
900
|
=== Calling Rodauth in the Routing Tree
|
|
820
901
|
|
|
821
|
-
In general, you will usually want to call rodauth early in your
|
|
902
|
+
In general, you will usually want to call +r.rodauth+ early in your
|
|
822
903
|
route block:
|
|
823
904
|
|
|
824
905
|
route do |r|
|
|
@@ -897,6 +978,12 @@ logged_in? :: Whether the session has been logged in.
|
|
|
897
978
|
authenticated? :: Similar to +logged_in?+, but if the account has setup two
|
|
898
979
|
factor authentication, whether the session has authenticated
|
|
899
980
|
via two factors.
|
|
981
|
+
authenticated_by :: An array of strings for successful authentication methods for
|
|
982
|
+
the current session (e.g. password/remember/webauthn).
|
|
983
|
+
possible_authentication_methods :: An array of strings for possible authentication
|
|
984
|
+
types that can be used for the account.
|
|
985
|
+
autologin_type :: If the current session was authenticated via autologin, the
|
|
986
|
+
type of autologin used.
|
|
900
987
|
require_two_factor_setup :: (two_factor_base feature) Require the session to have
|
|
901
988
|
setup two factor authentication, redirecting the
|
|
902
989
|
request to the two factor authentication setup page
|
|
@@ -911,6 +998,14 @@ require_current_password :: (password_expiration feature) Require a current
|
|
|
911
998
|
password, redirecting the request to the change
|
|
912
999
|
password page if the password for the account has
|
|
913
1000
|
expired.
|
|
1001
|
+
require_password_authentication :: (confirm_password feature) If not authenticated
|
|
1002
|
+
via password and the account has a password,
|
|
1003
|
+
redirect to the password confirmation page,
|
|
1004
|
+
saving the current location to redirect back
|
|
1005
|
+
to after password has been successfully
|
|
1006
|
+
confirmed. If the password_grace_period feature
|
|
1007
|
+
is used, also redirect if the password has not
|
|
1008
|
+
been recently entered.
|
|
914
1009
|
load_memory :: (remember feature) If the session has not been authenticated, look
|
|
915
1010
|
for the remember cookie. If present and valid, automatically
|
|
916
1011
|
log the session in, but mark that it was logged in via a remember
|
|
@@ -920,9 +1015,15 @@ logged_in_via_remember_key? :: (remember feature) Whether the current session ha
|
|
|
920
1015
|
sensitive actions where you want to require the user
|
|
921
1016
|
to reenter the password, you can use the
|
|
922
1017
|
confirm_password feature.
|
|
1018
|
+
http_basic_auth :: (http_basic_auth feature) Use HTTP Basic Authentication information
|
|
1019
|
+
to login the user if provided.
|
|
1020
|
+
require_http_basic_auth :: (http_basic_auth feature) Require that HTTP Basic
|
|
1021
|
+
Authentication be provided in the request.
|
|
923
1022
|
check_session_expiration :: (session_expiration feature) Check whether the current
|
|
924
1023
|
session has expired, automatically logging the session
|
|
925
1024
|
out if so.
|
|
1025
|
+
check_active_session :: (active_sessions feature) Check whether the current session
|
|
1026
|
+
is still active, automatically logging the session out if not.
|
|
926
1027
|
check_single_session :: (single_session feature) Check whether the current
|
|
927
1028
|
session is still the only valid session, automatically logging
|
|
928
1029
|
the session out if not.
|
|
@@ -931,10 +1032,15 @@ verified_account? :: (verify_grace_period feature) Whether the account is curren
|
|
|
931
1032
|
login as they are in the grace period.
|
|
932
1033
|
locked_out? :: (lockout feature) Whether the account for the current session has been
|
|
933
1034
|
locked out.
|
|
1035
|
+
authenticated_webauthn_id :: (webauthn feature) If the current session was
|
|
1036
|
+
authenticated via webauthn, the webauthn id of the
|
|
1037
|
+
credential used.
|
|
934
1038
|
*_path :: One of these is added for each of the routes added by Rodauth, giving the
|
|
935
|
-
relative path to the route.
|
|
1039
|
+
relative path to the route. Any options passed to this method will be
|
|
1040
|
+
converted into query parameters.
|
|
936
1041
|
*_url :: One of these is added for each of the routes added by Rodauth, giving the
|
|
937
|
-
|
|
1042
|
+
URL to the route. Any options passed to this method will be converted
|
|
1043
|
+
into query parameters.
|
|
938
1044
|
|
|
939
1045
|
=== With Multiple Configurations
|
|
940
1046
|
|
|
@@ -958,6 +1064,18 @@ the name as an argument to use that configuration:
|
|
|
958
1064
|
r.rodauth
|
|
959
1065
|
end
|
|
960
1066
|
|
|
1067
|
+
By default, alternate configurations will use the same session keys as the
|
|
1068
|
+
primary configuration, which may be undesirable. To ensure session state is
|
|
1069
|
+
separated between configurations, you can set a session key prefix for
|
|
1070
|
+
alternate configurations. If you are using the remember feature in both
|
|
1071
|
+
configurations, you may also want to set a different remember key in the
|
|
1072
|
+
alternate configuration:
|
|
1073
|
+
|
|
1074
|
+
plugin :rodauth, :name=>:secondary do
|
|
1075
|
+
session_key_prefix "secondary_"
|
|
1076
|
+
remember_cookie_key "_secondary_remember"
|
|
1077
|
+
end
|
|
1078
|
+
|
|
961
1079
|
=== With Password Hashes Inside the Accounts Table
|
|
962
1080
|
|
|
963
1081
|
You can use Rodauth if you are storing password hashes in the same
|
|
@@ -1066,6 +1184,20 @@ Facebook OAuth access token.
|
|
|
1066
1184
|
end
|
|
1067
1185
|
end
|
|
1068
1186
|
|
|
1187
|
+
=== With Rails
|
|
1188
|
+
|
|
1189
|
+
If you're using Rails, you can use the
|
|
1190
|
+
{rodauth-rails}[https://github.com/janko/rodauth-rails] gem which provides
|
|
1191
|
+
Rails integration for Rodauth. Some of its features include:
|
|
1192
|
+
|
|
1193
|
+
* generators for Rodauth & Sequel configuration, as well as views and mailers
|
|
1194
|
+
* uses Rails' flash messages and CSRF protection
|
|
1195
|
+
* automatically sets HMAC secret to Rails' secret key base
|
|
1196
|
+
* uses Action Controller & Action View for rendering templates
|
|
1197
|
+
* uses Action Mailer for sending emails
|
|
1198
|
+
|
|
1199
|
+
Follow the instructions in the rodauth-rails README to get started.
|
|
1200
|
+
|
|
1069
1201
|
=== With Other Web Frameworks
|
|
1070
1202
|
|
|
1071
1203
|
You can use Rodauth even if your application does not use the Roda web
|
|
@@ -1110,17 +1242,20 @@ don't use Roda:
|
|
|
1110
1242
|
|
|
1111
1243
|
=== Using 2 Factor Authentication
|
|
1112
1244
|
|
|
1113
|
-
Rodauth ships with 2 factor authentication support via
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1245
|
+
Rodauth ships with 2 factor authentication support via the following
|
|
1246
|
+
methods:
|
|
1247
|
+
|
|
1248
|
+
* WebAuthn
|
|
1249
|
+
* TOTP (Time-Based One-Time Passwords, RFC 6238).
|
|
1250
|
+
* SMS Codes
|
|
1251
|
+
* Recovery Codes
|
|
1117
1252
|
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1253
|
+
There are multiple ways to integrate 2 factor authentication with
|
|
1254
|
+
Rodauth, based on the needs of the application. By default, SMS
|
|
1255
|
+
codes and recovery codes are treated only as backup 2nd factors,
|
|
1256
|
+
a user cannot enable them without first enabling another 2nd factor
|
|
1257
|
+
authentication method. However, you can change this by using
|
|
1258
|
+
a configuration method.
|
|
1124
1259
|
|
|
1125
1260
|
If you want to support but not require 2 factor authentication:
|
|
1126
1261
|
|
|
@@ -1134,7 +1269,7 @@ If you want to support but not require 2 factor authentication:
|
|
|
1134
1269
|
# ...
|
|
1135
1270
|
end
|
|
1136
1271
|
|
|
1137
|
-
If you want to force all users to use
|
|
1272
|
+
If you want to force all users to use 2 factor authentication, requiring users
|
|
1138
1273
|
that don't currently have two authentication to set it up:
|
|
1139
1274
|
|
|
1140
1275
|
route do |r|
|
|
@@ -1251,7 +1386,7 @@ use the following basic structure
|
|
|
1251
1386
|
end
|
|
1252
1387
|
end
|
|
1253
1388
|
|
|
1254
|
-
See the
|
|
1389
|
+
See the {internals guide}[rdoc-ref:doc/internals.rdoc] for a more complete
|
|
1255
1390
|
example of how to construct features.
|
|
1256
1391
|
|
|
1257
1392
|
=== Overriding Route-Level Behavior
|
|
@@ -1281,6 +1416,13 @@ benefit from precompiling your rodauth templates:
|
|
|
1281
1416
|
end
|
|
1282
1417
|
precompile_rodauth_templates
|
|
1283
1418
|
|
|
1419
|
+
== Ruby Support Policy
|
|
1420
|
+
|
|
1421
|
+
Rodauth fully supports the currently supported versions of Ruby (MRI) and JRuby. It may
|
|
1422
|
+
support unsupported versions of Ruby or JRuby, but such support may be dropped in any
|
|
1423
|
+
minor version if keeping it becomes a support issue. The minimum Ruby version
|
|
1424
|
+
required to run the current version of Rodauth is 1.9.2.
|
|
1425
|
+
|
|
1284
1426
|
== Similar Projects
|
|
1285
1427
|
|
|
1286
1428
|
All of these are Rails-specific:
|