rodauth-rails 1.14.0 → 1.15.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/README.md +41 -41
- data/lib/generators/rodauth/install_generator.rb +6 -22
- data/lib/generators/rodauth/mailer/email_auth.erb +6 -0
- data/lib/generators/rodauth/mailer/otp_disabled.erb +6 -0
- data/lib/generators/rodauth/mailer/otp_locked_out.erb +6 -0
- data/lib/generators/rodauth/mailer/otp_setup.erb +6 -0
- data/lib/generators/rodauth/mailer/otp_unlock_failed.erb +6 -0
- data/lib/generators/rodauth/mailer/otp_unlocked.erb +6 -0
- data/lib/generators/rodauth/mailer/password_changed.erb +6 -0
- data/lib/generators/rodauth/mailer/reset_password.erb +6 -0
- data/lib/generators/rodauth/mailer/reset_password_notify.erb +6 -0
- data/lib/generators/rodauth/mailer/unlock_account.erb +6 -0
- data/lib/generators/rodauth/mailer/verify_account.erb +6 -0
- data/lib/generators/rodauth/mailer/verify_login_change.erb +7 -0
- data/lib/generators/rodauth/mailer/webauthn_authenticator_added.erb +6 -0
- data/lib/generators/rodauth/mailer/webauthn_authenticator_removed.erb +6 -0
- data/lib/generators/rodauth/mailer_generator.rb +126 -0
- data/lib/generators/rodauth/migration/active_record/audit_logging.erb +2 -2
- data/lib/generators/rodauth/migration/active_record/jwt_refresh.erb +0 -1
- data/lib/generators/rodauth/migration/active_record/otp_unlock.erb +7 -0
- data/lib/generators/rodauth/migration/sequel/audit_logging.erb +2 -2
- data/lib/generators/rodauth/migration/sequel/jwt_refresh.erb +1 -1
- data/lib/generators/rodauth/migration/sequel/otp_unlock.erb +6 -0
- data/lib/generators/rodauth/migration_generator.rb +3 -3
- data/lib/generators/rodauth/templates/INSTRUCTIONS +8 -2
- data/lib/generators/rodauth/templates/app/controllers/rodauth_controller.rb.tt +18 -2
- data/lib/generators/rodauth/templates/app/mailers/rodauth_mailer.rb.tt +4 -50
- data/lib/generators/rodauth/templates/app/misc/rodauth_main.rb.tt +5 -26
- data/lib/generators/rodauth/templates/app/models/account.rb.tt +1 -1
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_unlock.html.erb +21 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/otp_unlock_not_available.html.erb +5 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/tailwind/otp_unlock.html.erb +22 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/tailwind/otp_unlock_not_available.html.erb +14 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/tailwind/webauthn_remove.html.erb +1 -0
- data/lib/generators/rodauth/templates/app/views/rodauth/webauthn_remove.html.erb +1 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/otp_disabled.text.erb +2 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/otp_locked_out.text.erb +9 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/otp_setup.text.erb +2 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/otp_unlock_failed.text.erb +8 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/otp_unlocked.text.erb +2 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/webauthn_authenticator_added.text.erb +3 -0
- data/lib/generators/rodauth/templates/app/views/rodauth_mailer/webauthn_authenticator_removed.text.erb +3 -0
- data/lib/generators/rodauth/views_generator.rb +2 -1
- data/lib/rodauth/rails/feature/base.rb +2 -1
- data/lib/rodauth/rails/feature/instrumentation.rb +12 -6
- data/lib/rodauth/rails/feature/internal_request.rb +16 -6
- data/lib/rodauth/rails/version.rb +1 -1
- data/lib/rodauth/rails.rb +1 -1
- data/rodauth-rails.gemspec +4 -4
- metadata +35 -8
- data/CHANGELOG.md +0 -568
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12ac51c0ef57f053d8bdc843eef7a846554defb7e37403b9ccf2ab83bd52fb6b
|
4
|
+
data.tar.gz: 5854a05239bfbb92f2b0aecc5c0e9dd1de22388d364afc6f4fe601e4900c54c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbf3d3cc5f453756a8a52a73409de3134569aa12908be81a505e637b0a05f890735a9589df237fb1e7f2f9687a5df2ac6821586d0e4cd52995d9efd3b0989e46
|
7
|
+
data.tar.gz: 6c1725dc4b64c498a6d840aba77c61c273df112bb712610b8342ebded946c7dfdb7a4e7fe33ffac69303ff8020223902040a66ebb58d6cd7247a085ceebdd448
|
data/README.md
CHANGED
@@ -68,7 +68,7 @@ $ rails generate rodauth:install
|
|
68
68
|
|
69
69
|
This generator will create a Rodauth app and configuration with common
|
70
70
|
authentication features enabled, a database migration with tables required by
|
71
|
-
those features,
|
71
|
+
those features, and a few other files.
|
72
72
|
|
73
73
|
Feel free to remove any features you don't need, along with their corresponding
|
74
74
|
tables. Afterwards, run the migration:
|
@@ -77,14 +77,6 @@ tables. Afterwards, run the migration:
|
|
77
77
|
$ rails db:migrate
|
78
78
|
```
|
79
79
|
|
80
|
-
For your mailer to be able to generate email links, you'll need to set up
|
81
|
-
default URL options in each environment. Here is a possible configuration for
|
82
|
-
`config/environments/development.rb`:
|
83
|
-
|
84
|
-
```rb
|
85
|
-
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
|
86
|
-
```
|
87
|
-
|
88
80
|
### Install options
|
89
81
|
|
90
82
|
The install generator will use the `accounts` table by default. You can specify a different table name:
|
@@ -254,7 +246,7 @@ end
|
|
254
246
|
```rb
|
255
247
|
class RodauthController < ApplicationController
|
256
248
|
before_action :verify_captcha, only: :login, if: -> { request.post? } # executes before Rodauth endpoints
|
257
|
-
rescue_from("
|
249
|
+
rescue_from("SomeError") { |exception| ... } # rescues around Rodauth endpoints
|
258
250
|
end
|
259
251
|
```
|
260
252
|
|
@@ -316,42 +308,41 @@ $ rails generate rodauth:views webauthn two_factor_base --name admin
|
|
316
308
|
|
317
309
|
## Mailer
|
318
310
|
|
319
|
-
|
320
|
-
|
321
|
-
|
311
|
+
When you're ready to modify the default email templates and safely deliver them
|
312
|
+
in a background job, you can run the following command to generate the mailer
|
313
|
+
integration:
|
322
314
|
|
323
|
-
```
|
324
|
-
|
325
|
-
class RodauthMailer < ApplicationMailer
|
326
|
-
def verify_account(account_id, key) ... end
|
327
|
-
def reset_password(account_id, key) ... end
|
328
|
-
def verify_login_change(account_id, key) ... end
|
329
|
-
def password_changed(account_id) ... end
|
330
|
-
# def email_auth(account_id, key) ... end
|
331
|
-
# def unlock_account(account_id, key) ... end
|
332
|
-
end
|
315
|
+
```sh
|
316
|
+
$ rails generate rodauth:mailer
|
333
317
|
```
|
318
|
+
|
319
|
+
This will create a `RodauthMailer`, email templates, and necessary Rodauth
|
320
|
+
configuration for the features you have enabled. For email links to work, you
|
321
|
+
need to have `config.action_mailer.default_url_options` set for each
|
322
|
+
environment.
|
323
|
+
|
334
324
|
```rb
|
335
|
-
#
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
325
|
+
# config/environments/development.rb
|
326
|
+
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
|
327
|
+
```
|
328
|
+
|
329
|
+
The generator accepts various options:
|
330
|
+
|
331
|
+
```sh
|
332
|
+
# generate mailer integration for specified features
|
333
|
+
$ rails generate rodauth:mailer email_auth lockout webauthn_modify_email
|
334
|
+
|
335
|
+
# generate mailer integration for all Rodauth features
|
336
|
+
$ rails generate rodauth:mailer --all
|
337
|
+
|
338
|
+
# specify different Rodauth configuration to select enabled features
|
339
|
+
$ rails generate rodauth:mailer --name admin
|
350
340
|
```
|
351
341
|
|
352
|
-
|
353
|
-
emails in a background job. If you want to
|
354
|
-
modify the configuration to call `#deliver_now`
|
342
|
+
Note that the generated Rodauth configuration calls `#deliver_later`, which
|
343
|
+
uses Active Job to deliver emails in a background job. If you want to deliver
|
344
|
+
emails synchronously, you can modify the configuration to call `#deliver_now`
|
345
|
+
instead.
|
355
346
|
|
356
347
|
If you're using a background processing library without an Active Job adapter,
|
357
348
|
or a 3rd-party service for sending transactional emails, see [this wiki
|
@@ -535,6 +526,14 @@ Rodauth::Rails.rodauth(session: { two_factor_auth_setup: true })
|
|
535
526
|
Rodauth::Rails.rodauth(:admin, params: { "param" => "value" })
|
536
527
|
```
|
537
528
|
|
529
|
+
You can override default URL options ad-hoc by modifying `#rails_url_options`:
|
530
|
+
|
531
|
+
```rb
|
532
|
+
rodauth.base_url #=> "https://example.com"
|
533
|
+
rodauth.rails_url_options[:host] = "subdomain.example.com"
|
534
|
+
rodauth.base_url #=> "https://subdomain.example.com"
|
535
|
+
```
|
536
|
+
|
538
537
|
### Using as a library
|
539
538
|
|
540
539
|
Rodauth offers a [`Rodauth.lib`][library] method for when you want to use it as a library (via [internal requests][internal_request]), as opposed to having it route requests. This gem provides a `Rodauth::Rails.lib` counterpart that does the same but with Rails integration:
|
@@ -633,6 +632,7 @@ The `rails` feature rodauth-rails loads provides the following configuration met
|
|
633
632
|
| `rails_controller_instance` | Instance of the controller with the request env context. |
|
634
633
|
| `rails_controller` | Controller class to use for rendering and CSRF protection. |
|
635
634
|
| `rails_account_model` | Model class connected with the accounts table. |
|
635
|
+
| `rails_url_options` | Options used for generating URLs outside of a request (defaults to `config.action_mailer.default_url_options`) |
|
636
636
|
|
637
637
|
```rb
|
638
638
|
class RodauthMain < Rodauth::Rails::Auth
|
@@ -13,15 +13,6 @@ module Rodauth
|
|
13
13
|
"sqlserver" => RUBY_ENGINE == "jruby" ? "mssql" : "tinytds",
|
14
14
|
}
|
15
15
|
|
16
|
-
MAILER_VIEWS = %w[
|
17
|
-
email_auth
|
18
|
-
password_changed
|
19
|
-
reset_password
|
20
|
-
unlock_account
|
21
|
-
verify_account
|
22
|
-
verify_login_change
|
23
|
-
]
|
24
|
-
|
25
16
|
source_root "#{__dir__}/templates"
|
26
17
|
namespace "rodauth:install"
|
27
18
|
|
@@ -55,16 +46,6 @@ module Rodauth
|
|
55
46
|
template "app/models/account.rb", "app/models/#{table_prefix}.rb"
|
56
47
|
end
|
57
48
|
|
58
|
-
def create_mailer
|
59
|
-
return unless defined?(ActionMailer)
|
60
|
-
|
61
|
-
template "app/mailers/rodauth_mailer.rb"
|
62
|
-
|
63
|
-
MAILER_VIEWS.each do |view|
|
64
|
-
copy_file "app/views/rodauth_mailer/#{view}.text.erb"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
49
|
def create_fixtures
|
69
50
|
generator_options = ::Rails.configuration.generators.options
|
70
51
|
if generator_options[:test_unit][:fixture] && generator_options[:test_unit][:fixture_replacement].nil?
|
@@ -101,9 +82,12 @@ module Rodauth
|
|
101
82
|
options[:argon2]
|
102
83
|
end
|
103
84
|
|
104
|
-
def
|
105
|
-
defined?(ActiveRecord::Railtie)
|
106
|
-
|
85
|
+
def activerecord?
|
86
|
+
defined?(ActiveRecord::Railtie)
|
87
|
+
end
|
88
|
+
|
89
|
+
def sequel?
|
90
|
+
defined?(Sequel) && Sequel::DATABASES.any?
|
107
91
|
end
|
108
92
|
|
109
93
|
def session_store?
|
@@ -0,0 +1,7 @@
|
|
1
|
+
def verify_login_change(name, account_id, key)
|
2
|
+
@rodauth = rodauth(name, account_id) { @verify_login_change_key_value = key }
|
3
|
+
@account = @rodauth.rails_account
|
4
|
+
@new_email = @account.login_change_key.login
|
5
|
+
|
6
|
+
mail to: @new_email, subject: @rodauth.email_subject_prefix + @rodauth.verify_login_change_email_subject
|
7
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require "rails/generators/base"
|
2
|
+
|
3
|
+
module Rodauth
|
4
|
+
module Rails
|
5
|
+
module Generators
|
6
|
+
class MailerGenerator < ::Rails::Generators::Base
|
7
|
+
source_root "#{__dir__}/templates"
|
8
|
+
namespace "rodauth:mailer"
|
9
|
+
|
10
|
+
argument :selected_features, optional: true, type: :array,
|
11
|
+
desc: "Rodauth features to generate mailer integration for (verify_account, verify_login_change, reset_password etc.)"
|
12
|
+
|
13
|
+
class_option :all, aliases: "-a", type: :boolean,
|
14
|
+
desc: "Generates mailer integration for all Rodauth features",
|
15
|
+
default: false
|
16
|
+
|
17
|
+
class_option :name, aliases: "-n", type: :string,
|
18
|
+
desc: "The configuration name for which to generate mailer configuration",
|
19
|
+
default: nil
|
20
|
+
|
21
|
+
EMAILS = {
|
22
|
+
verify_account: %w[verify_account],
|
23
|
+
reset_password: %w[reset_password],
|
24
|
+
verify_login_change: %w[verify_login_change],
|
25
|
+
email_auth: %w[email_auth],
|
26
|
+
lockout: %w[unlock_account],
|
27
|
+
reset_password_notify: %w[reset_password_notify],
|
28
|
+
change_password_notify: %w[password_changed],
|
29
|
+
otp_modify_email: %w[otp_setup otp_disabled],
|
30
|
+
otp_lockout_email: %w[otp_locked_out otp_unlocked otp_unlock_failed],
|
31
|
+
webauthn_modify_email: %w[webauthn_authenticator_added webauthn_authenticator_removed],
|
32
|
+
}
|
33
|
+
|
34
|
+
TOKENS = %w[reset_password verify_account verify_login_change email_auth unlock_account]
|
35
|
+
|
36
|
+
def copy_mailer_views
|
37
|
+
return unless validate_features
|
38
|
+
|
39
|
+
emails.each do |email|
|
40
|
+
copy_file "app/views/rodauth_mailer/#{email}.text.erb"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def copy_mailer
|
45
|
+
return unless validate_features
|
46
|
+
|
47
|
+
if File.exist?("#{destination_root}/app/mailers/rodauth_mailer.rb") && options.fetch(:skip, true) && !options[:force] && behavior == :invoke
|
48
|
+
say "\nCopy the following lines into your Rodauth mailer:\n\n#{mailer_content}"
|
49
|
+
else
|
50
|
+
template "app/mailers/rodauth_mailer.rb"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def show_configuration
|
55
|
+
return unless behavior == :invoke && validate_features
|
56
|
+
|
57
|
+
say "\nCopy the following lines into your Rodauth configuration:\n\n#{configuration_content}"
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def mailer_content
|
63
|
+
emails
|
64
|
+
.map { |email| File.read("#{__dir__}/mailer/#{email}.erb") }
|
65
|
+
.map { |content| erb_eval(content) }
|
66
|
+
.join("\n")
|
67
|
+
.indent(2)
|
68
|
+
end
|
69
|
+
|
70
|
+
def configuration_content
|
71
|
+
emails
|
72
|
+
.map { |email| configuration_chunk(email) }
|
73
|
+
.join
|
74
|
+
.indent(2)
|
75
|
+
end
|
76
|
+
|
77
|
+
def configuration_chunk(email)
|
78
|
+
<<~RUBY
|
79
|
+
create_#{email}_email do#{" |_login|" if email == "verify_login_change"}
|
80
|
+
RodauthMailer.#{email}(self.class.configuration_name, account_id#{", #{email}_key_value" if TOKENS.include?(email)})
|
81
|
+
end
|
82
|
+
RUBY
|
83
|
+
end
|
84
|
+
|
85
|
+
def erb_eval(content)
|
86
|
+
if ERB.version[/\d+\.\d+\.\d+/].to_s >= "2.2.0"
|
87
|
+
ERB.new(content, trim_mode: "-").result(binding)
|
88
|
+
else
|
89
|
+
ERB.new(content, 0, "-").result(binding)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def emails
|
94
|
+
features.flat_map { |feature| EMAILS.fetch(feature) }
|
95
|
+
end
|
96
|
+
|
97
|
+
def validate_features
|
98
|
+
if (features - EMAILS.keys).any?
|
99
|
+
say "No available email template for feature(s): #{(features - EMAILS.keys).join(", ")}", :error
|
100
|
+
false
|
101
|
+
else
|
102
|
+
true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def features
|
107
|
+
if options[:all]
|
108
|
+
EMAILS.keys
|
109
|
+
elsif selected_features
|
110
|
+
selected_features.map(&:to_sym)
|
111
|
+
else
|
112
|
+
rodauth_configuration.features & EMAILS.keys
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def rodauth_configuration
|
117
|
+
Rodauth::Rails.app.rodauth!(configuration_name)
|
118
|
+
end
|
119
|
+
|
120
|
+
def configuration_name
|
121
|
+
options[:name]&.to_sym
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -11,6 +11,6 @@ create_table :<%= table_prefix %>_authentication_audit_logs<%= primary_key_type
|
|
11
11
|
<% else -%>
|
12
12
|
t.string :metadata
|
13
13
|
<% end -%>
|
14
|
-
t.index [:<%= table_prefix %>_id, :at]
|
15
|
-
t.index :at
|
14
|
+
t.index [:<%= table_prefix %>_id, :at]
|
15
|
+
t.index :at
|
16
16
|
end
|
@@ -3,5 +3,4 @@ create_table :<%= table_prefix %>_jwt_refresh_keys<%= primary_key_type %> do |t|
|
|
3
3
|
t.references :<%= table_prefix %>, foreign_key: true, null: false<%= primary_key_type(:type) %>
|
4
4
|
t.string :key, null: false
|
5
5
|
t.datetime :deadline, null: false
|
6
|
-
t.index :<%= table_prefix %>_id, name: "<%= table_prefix %>_jwt_rk_<%= table_prefix %>_id_idx"
|
7
6
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Used by the otp_unlock feature
|
2
|
+
create_table :<%= table_prefix %>_otp_unlocks, id: false do |t|
|
3
|
+
t.<%= primary_key_type(nil) %> :id, primary_key: true
|
4
|
+
t.foreign_key :<%= table_prefix.pluralize %>, column: :id
|
5
|
+
t.integer :num_successes, null: false, default: 1
|
6
|
+
t.datetime :next_auth_attempt_after, null: false, default: -> { "<%= current_timestamp %>" }
|
7
|
+
end
|
@@ -12,6 +12,6 @@ create_table :<%= table_prefix %>_authentication_audit_logs do
|
|
12
12
|
<% else -%>
|
13
13
|
String :metadata
|
14
14
|
<% end -%>
|
15
|
-
index [:<%= table_prefix %>_id, :at]
|
16
|
-
index :at
|
15
|
+
index [:<%= table_prefix %>_id, :at]
|
16
|
+
index :at
|
17
17
|
end
|
@@ -4,5 +4,5 @@ create_table :<%= table_prefix %>_jwt_refresh_keys do
|
|
4
4
|
foreign_key :<%= table_prefix %>_id, :<%= table_prefix.pluralize %>, null: false, type: :Bignum
|
5
5
|
String :key, null: false
|
6
6
|
DateTime :deadline, null: false
|
7
|
-
index :<%= table_prefix %>_id
|
7
|
+
index :<%= table_prefix %>_id
|
8
8
|
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# Used by the otp_unlock feature
|
2
|
+
create_table :<%= table_prefix %>_otp_unlocks do
|
3
|
+
foreign_key :id, :<%= table_prefix.pluralize %>, primary_key: true, type: :Bignum
|
4
|
+
Integer :num_successes, null: false, default: 1
|
5
|
+
Time :next_auth_attempt_after, null: false, default: Sequel::CURRENT_TIMESTAMP
|
6
|
+
end
|
@@ -20,12 +20,12 @@ module Rodauth
|
|
20
20
|
desc: "Name of the generated migration file"
|
21
21
|
|
22
22
|
def create_rodauth_migration
|
23
|
-
|
23
|
+
return unless validate_features
|
24
24
|
|
25
25
|
migration_template "db/migrate/create_rodauth.rb", File.join(db_migrate_path, "#{migration_name}.rb")
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
28
|
+
def show_configuration
|
29
29
|
# skip if called from install generator, it already adds configuration
|
30
30
|
return if current_command_chain.include?(:generate_rodauth_migration)
|
31
31
|
return unless options[:prefix] && behavior == :invoke
|
@@ -36,7 +36,7 @@ module Rodauth
|
|
36
36
|
.join("\n")
|
37
37
|
.indent(2)
|
38
38
|
|
39
|
-
say "\
|
39
|
+
say "\nCopy the following lines into your Rodauth configuration:\n\n#{configuration}"
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -39,7 +39,7 @@ Depending on your application's configuration some manual setup may be required:
|
|
39
39
|
...
|
40
40
|
</head>
|
41
41
|
|
42
|
-
|
42
|
+
* Not required *
|
43
43
|
|
44
44
|
5. You can copy Rodauth views (for customization) to your app by running:
|
45
45
|
|
@@ -47,6 +47,12 @@ Depending on your application's configuration some manual setup may be required:
|
|
47
47
|
|
48
48
|
rails g rodauth:views --css=tailwind # tailwind views (requires @tailwindcss/forms plugin)
|
49
49
|
|
50
|
-
|
50
|
+
* Not required *
|
51
|
+
|
52
|
+
6. You can generate email templates and mailer integration by running:
|
53
|
+
|
54
|
+
rails g rodauth:mailer
|
55
|
+
|
56
|
+
* Not required *
|
51
57
|
|
52
58
|
===============================================================================
|
@@ -1,4 +1,20 @@
|
|
1
1
|
class RodauthController < ApplicationController
|
2
|
-
#
|
3
|
-
# registered action callbacks and
|
2
|
+
# Used by Rodauth for rendering views, CSRF protection, running any
|
3
|
+
# registered action callbacks and rescue handlers, instrumentation etc.
|
4
|
+
|
5
|
+
# Controller callbacks and rescue handlers will run around Rodauth endpoints.
|
6
|
+
# before_action :verify_captcha, only: :login, if: -> { request.post? }
|
7
|
+
# rescue_from("SomeError") { |exception| ... }
|
8
|
+
|
9
|
+
# Layout can be changed for all Rodauth pages or only certain pages.
|
10
|
+
# layout "authentication"
|
11
|
+
# layout -> do
|
12
|
+
# case rodauth.current_route
|
13
|
+
# when :login, :create_account, :verify_account, :verify_account_resend,
|
14
|
+
# :reset_password, :reset_password_request
|
15
|
+
# "authentication"
|
16
|
+
# else
|
17
|
+
# "application"
|
18
|
+
# end
|
19
|
+
# end
|
4
20
|
end
|
@@ -1,61 +1,15 @@
|
|
1
1
|
class RodauthMailer < ApplicationMailer
|
2
2
|
default to: -> { @rodauth.email_to }, from: -> { @rodauth.email_from }
|
3
3
|
|
4
|
-
|
5
|
-
@rodauth = rodauth(name, account_id) { @verify_account_key_value = key }
|
6
|
-
@account = @rodauth.rails_account
|
7
|
-
|
8
|
-
mail subject: @rodauth.email_subject_prefix + @rodauth.verify_account_email_subject
|
9
|
-
end
|
10
|
-
|
11
|
-
def reset_password(name, account_id, key)
|
12
|
-
@rodauth = rodauth(name, account_id) { @reset_password_key_value = key }
|
13
|
-
@account = @rodauth.rails_account
|
14
|
-
|
15
|
-
mail subject: @rodauth.email_subject_prefix + @rodauth.reset_password_email_subject
|
16
|
-
end
|
17
|
-
|
18
|
-
def verify_login_change(name, account_id, key)
|
19
|
-
@rodauth = rodauth(name, account_id) { @verify_login_change_key_value = key }
|
20
|
-
@account = @rodauth.rails_account
|
21
|
-
@new_email = @account.login_change_key.login
|
22
|
-
|
23
|
-
mail to: @new_email, subject: @rodauth.email_subject_prefix + @rodauth.verify_login_change_email_subject
|
24
|
-
end
|
25
|
-
|
26
|
-
def password_changed(name, account_id)
|
27
|
-
@rodauth = rodauth(name, account_id)
|
28
|
-
@account = @rodauth.rails_account
|
29
|
-
|
30
|
-
mail subject: @rodauth.email_subject_prefix + @rodauth.password_changed_email_subject
|
31
|
-
end
|
32
|
-
|
33
|
-
# def reset_password_notify(name, account_id)
|
34
|
-
# @rodauth = rodauth(name, account_id)
|
35
|
-
# @account = @rodauth.rails_account
|
36
|
-
|
37
|
-
# mail subject: @rodauth.email_subject_prefix + @rodauth.reset_password_notify_email_subject
|
38
|
-
# end
|
39
|
-
|
40
|
-
# def email_auth(name, account_id, key)
|
41
|
-
# @rodauth = rodauth(name, account_id) { @email_auth_key_value = key }
|
42
|
-
# @account = @rodauth.rails_account
|
43
|
-
|
44
|
-
# mail subject: @rodauth.email_subject_prefix + @rodauth.email_auth_email_subject
|
45
|
-
# end
|
46
|
-
|
47
|
-
# def unlock_account(name, account_id, key)
|
48
|
-
# @rodauth = rodauth(name, account_id) { @unlock_account_key_value = key }
|
49
|
-
# @account = @rodauth.rails_account
|
50
|
-
|
51
|
-
# mail subject: @rodauth.email_subject_prefix + @rodauth.unlock_account_email_subject
|
52
|
-
# end
|
4
|
+
<%= mailer_content -%>
|
53
5
|
|
54
6
|
private
|
55
7
|
|
8
|
+
# Default URL options are inherited from Action Mailer, but you can override them
|
9
|
+
# ad-hoc by modifying the `rodauth.rails_url_options` hash.
|
56
10
|
def rodauth(name, account_id, &block)
|
57
11
|
instance = RodauthApp.rodauth(name).allocate
|
58
|
-
instance.
|
12
|
+
instance.account_from_id(account_id)
|
59
13
|
instance.instance_eval(&block) if block
|
60
14
|
instance
|
61
15
|
end
|