rodauth-rails 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +104 -27
- data/lib/generators/rodauth/install_generator.rb +9 -15
- data/lib/generators/rodauth/templates/app/lib/rodauth_app.rb +23 -24
- data/lib/rodauth/rails.rb +10 -0
- data/lib/rodauth/rails/app.rb +6 -12
- data/lib/rodauth/rails/app/flash.rb +5 -3
- data/lib/rodauth/rails/feature.rb +8 -0
- data/lib/rodauth/rails/version.rb +1 -1
- data/rodauth-rails.gemspec +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60fda35b195285a7c9cc14e07153d80faa9e939cf2944fbb04e1360baf30e306
|
4
|
+
data.tar.gz: 1f89bcfff28e6d08287fa67a9fe9228a2d61f15a8a9cdecb9fcf138137d72c47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e4ed3afbe7a114ba36f19541d1c8c8ee62de07526400230b1386f027b05876cd78ad88bdb40cae9767e74f83d1532d4939d97d03657662933f81d7086df34d9
|
7
|
+
data.tar.gz: cae1fc15a86f1b2e2423a8e54f36b844f610ba23ff74fd9ced132200e9816260028682c0efea1dcf19cf8a722a7ae49882c8d31c670e268e229117b4f6fb84f2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.9.0 (2021-02-07)
|
2
|
+
|
3
|
+
* Load Roda's JSON support by default, so that enabling `json`/`jwt` feature is all that's needed (@janko)
|
4
|
+
|
5
|
+
* Bump Rodauth dependency to 2.9+ (@janko)
|
6
|
+
|
7
|
+
* Add `--json` option for `rodauth:install` generator for configuring `json` feature (@janko)
|
8
|
+
|
9
|
+
* Add `--jwt` option for `rodauth:install` generator for configuring `jwt` feature (@janko)
|
10
|
+
|
11
|
+
* Remove the `--api` option from `rodauth:install` generator (@janko)
|
12
|
+
|
1
13
|
## 0.8.2 (2021-01-10)
|
2
14
|
|
3
15
|
* Reset Rails session on `#clear_session`, protecting from potential session fixation attacks (@janko)
|
data/README.md
CHANGED
@@ -2,6 +2,35 @@
|
|
2
2
|
|
3
3
|
Provides Rails integration for the [Rodauth] authentication framework.
|
4
4
|
|
5
|
+
## Table of contents
|
6
|
+
|
7
|
+
* [Resources](#resources)
|
8
|
+
* [Why Rodauth?](#why-rodauth)
|
9
|
+
* [Upgrading](#upgrading)
|
10
|
+
* [Installation](#installation)
|
11
|
+
* [Usage](#usage)
|
12
|
+
- [Routes](#routes)
|
13
|
+
- [Current account](#current-account)
|
14
|
+
- [Requiring authentication](#requiring-authentication)
|
15
|
+
- [Views](#views)
|
16
|
+
- [Mailer](#mailer)
|
17
|
+
- [Migrations](#migrations)
|
18
|
+
- [Multiple configurations](#multiple-configurations)
|
19
|
+
- [Calling controller methods](#calling-controller-methods)
|
20
|
+
- [Rodauth instance](#rodauth-instance)
|
21
|
+
* [How it works](#how-it-works)
|
22
|
+
- [Middleware](#middleware)
|
23
|
+
- [App](#app)
|
24
|
+
- [Sequel](#sequel)
|
25
|
+
* [JSON API](#json-api)
|
26
|
+
* [OmniAuth](#omniauth)
|
27
|
+
* [Configuring](#configuring)
|
28
|
+
* [Custom extensions](#custom-extensions)
|
29
|
+
* [Testing](#testing)
|
30
|
+
* [Rodauth defaults](#rodauth-defaults)
|
31
|
+
- [Database functions](#database-functions)
|
32
|
+
- [Account statuses](#account-statuses)
|
33
|
+
|
5
34
|
## Resources
|
6
35
|
|
7
36
|
Useful links:
|
@@ -18,11 +47,11 @@ Articles:
|
|
18
47
|
## Why Rodauth?
|
19
48
|
|
20
49
|
There are already several popular authentication solutions for Rails (Devise,
|
21
|
-
Sorcery, Clearance, Authlogic), so why would you choose Rodauth?
|
22
|
-
|
50
|
+
Sorcery, Clearance, Authlogic), so why would you choose Rodauth? Here are some
|
51
|
+
of the advantages that stand out for me:
|
23
52
|
|
24
53
|
* multifactor authentication ([TOTP][otp], [SMS codes][sms_codes], [recovery codes][recovery_codes], [WebAuthn][webauthn])
|
25
|
-
* standardized [JSON API support][
|
54
|
+
* standardized [JSON API support][json] for every feature (including [JWT][jwt])
|
26
55
|
* enterprise security features ([password complexity][password_complexity], [disallow password reuse][disallow_password_reuse], [password expiration][password_expiration], [session expiration][session_expiration], [single session][single_session], [account expiration][account_expiration])
|
27
56
|
* [email authentication][email_auth] (aka "passwordless")
|
28
57
|
* [audit logging][audit_logging] (for any action)
|
@@ -54,7 +83,7 @@ documentation][hmac] for instructions on how to safely transition, or just set
|
|
54
83
|
Add the gem to your Gemfile:
|
55
84
|
|
56
85
|
```rb
|
57
|
-
gem "rodauth-rails", "~> 0.
|
86
|
+
gem "rodauth-rails", "~> 0.9"
|
58
87
|
|
59
88
|
# gem "jwt", require: false # for JWT feature
|
60
89
|
# gem "rotp", require: false # for OTP feature
|
@@ -73,7 +102,9 @@ $ rails generate rodauth:install
|
|
73
102
|
Or if you want Rodauth endpoints to be exposed via JSON API:
|
74
103
|
|
75
104
|
```sh
|
76
|
-
$ rails generate rodauth:install --
|
105
|
+
$ rails generate rodauth:install --json # regular authentication using the Rails session
|
106
|
+
# or
|
107
|
+
$ rails generate rodauth:install --jwt # token authentication via the "Authorization" header
|
77
108
|
$ bundle add jwt
|
78
109
|
```
|
79
110
|
|
@@ -481,6 +512,42 @@ class CreateRodauthOtpSmsCodesRecoveryCodes < ActiveRecord::Migration
|
|
481
512
|
end
|
482
513
|
```
|
483
514
|
|
515
|
+
### Multiple configurations
|
516
|
+
|
517
|
+
If you need to handle multiple types of accounts that require different
|
518
|
+
authentication logic, you can create different configurations for them:
|
519
|
+
|
520
|
+
```rb
|
521
|
+
# app/lib/rodauth_app.rb
|
522
|
+
class RodauthApp < Rodauth::Rails::App
|
523
|
+
# primary configuration
|
524
|
+
configure do
|
525
|
+
# ...
|
526
|
+
end
|
527
|
+
|
528
|
+
# alternative configuration
|
529
|
+
configure(:admin) do
|
530
|
+
# ... enable features ...
|
531
|
+
prefix "/admin"
|
532
|
+
session_key_prefix "admin_"
|
533
|
+
remember_cookie_key "_admin_remember" # if using remember feature
|
534
|
+
# ...
|
535
|
+
end
|
536
|
+
|
537
|
+
route do |r|
|
538
|
+
r.rodauth
|
539
|
+
r.on("admin") { r.rodauth(:admin) }
|
540
|
+
# ...
|
541
|
+
end
|
542
|
+
end
|
543
|
+
```
|
544
|
+
|
545
|
+
Then in your application you can reference the secondary Rodauth instance:
|
546
|
+
|
547
|
+
```rb
|
548
|
+
rodauth(:admin).login_path #=> "/admin/login"
|
549
|
+
```
|
550
|
+
|
484
551
|
### Calling controller methods
|
485
552
|
|
486
553
|
When using Rodauth before/after hooks or generally overriding your Rodauth
|
@@ -514,7 +581,7 @@ Rodauth operations outside of the request context. rodauth-rails gives you the
|
|
514
581
|
ability to retrieve the Rodauth instance:
|
515
582
|
|
516
583
|
```rb
|
517
|
-
rodauth = Rodauth::Rails.rodauth # or Rodauth::Rails.rodauth(:
|
584
|
+
rodauth = Rodauth::Rails.rodauth # or Rodauth::Rails.rodauth(:admin)
|
518
585
|
|
519
586
|
rodauth.login_url #=> "https://example.com/login"
|
520
587
|
rodauth.account_from_login("user@example.com") # loads user by email
|
@@ -545,8 +612,8 @@ The Rodauth app stores the `Rodauth::Auth` instance in the Rack env hash, which
|
|
545
612
|
is then available in your Rails app:
|
546
613
|
|
547
614
|
```rb
|
548
|
-
request.env["rodauth"]
|
549
|
-
request.env["rodauth.
|
615
|
+
request.env["rodauth"] #=> #<Rodauth::Auth>
|
616
|
+
request.env["rodauth.admin"] #=> #<Rodauth::Auth> (if using multiple configurations)
|
550
617
|
```
|
551
618
|
|
552
619
|
For convenience, this object can be accessed via the `#rodauth` method in views
|
@@ -555,14 +622,14 @@ and controllers:
|
|
555
622
|
```rb
|
556
623
|
class MyController < ApplicationController
|
557
624
|
def my_action
|
558
|
-
rodauth
|
559
|
-
rodauth(:
|
625
|
+
rodauth #=> #<Rodauth::Auth>
|
626
|
+
rodauth(:admin) #=> #<Rodauth::Auth> (if using multiple configurations)
|
560
627
|
end
|
561
628
|
end
|
562
629
|
```
|
563
630
|
```erb
|
564
|
-
<% rodauth
|
565
|
-
<% rodauth(:
|
631
|
+
<% rodauth #=> #<Rodauth::Auth> %>
|
632
|
+
<% rodauth(:admin) #=> #<Rodauth::Auth> (if using multiple configurations) %>
|
566
633
|
```
|
567
634
|
|
568
635
|
### App
|
@@ -584,7 +651,7 @@ any additional [plugin options].
|
|
584
651
|
class RodauthApp < Rodauth::Rails::App
|
585
652
|
configure { ... } # defining default Rodauth configuration
|
586
653
|
configure(json: true) { ... } # passing options to the Rodauth plugin
|
587
|
-
configure(:
|
654
|
+
configure(:admin) { ... } # defining multiple Rodauth configurations
|
588
655
|
end
|
589
656
|
```
|
590
657
|
|
@@ -619,15 +686,32 @@ function calls).
|
|
619
686
|
|
620
687
|
If ActiveRecord is used in the application, the `rodauth:install` generator
|
621
688
|
will have automatically configured Sequel to reuse ActiveRecord's database
|
622
|
-
connection
|
689
|
+
connection, using the [sequel-activerecord_connection] gem.
|
623
690
|
|
624
691
|
This means that, from the usage perspective, Sequel can be considered just
|
625
692
|
as an implementation detail of Rodauth.
|
626
693
|
|
627
694
|
## JSON API
|
628
695
|
|
629
|
-
|
630
|
-
|
696
|
+
To make Rodauth endpoints accessible via JSON API, enable the [`json`][json]
|
697
|
+
feature:
|
698
|
+
|
699
|
+
```rb
|
700
|
+
# app/lib/rodauth_app.rb
|
701
|
+
class RodauthApp < Rodauth::Rails::App
|
702
|
+
configure do
|
703
|
+
# ...
|
704
|
+
enable :json
|
705
|
+
only_json? true # accept only JSON requests
|
706
|
+
# ...
|
707
|
+
end
|
708
|
+
end
|
709
|
+
```
|
710
|
+
|
711
|
+
This will store account session data into the Rails session. If you rather want
|
712
|
+
stateless token-based authentication via the `Authorization` header, enable the
|
713
|
+
[`jwt`][jwt] feature (which builds on top of the `json` feature) and add the
|
714
|
+
[JWT gem] to the Gemfile:
|
631
715
|
|
632
716
|
```sh
|
633
717
|
$ bundle add jwt
|
@@ -635,24 +719,16 @@ $ bundle add jwt
|
|
635
719
|
```rb
|
636
720
|
# app/lib/rodauth_app.rb
|
637
721
|
class RodauthApp < Rodauth::Rails::App
|
638
|
-
configure
|
722
|
+
configure do
|
639
723
|
# ...
|
640
724
|
enable :jwt
|
641
|
-
|
642
|
-
|
725
|
+
jwt_secret "<YOUR_SECRET_KEY>" # store the JWT secret in a safe place
|
726
|
+
only_json? true # accept only JSON requests
|
643
727
|
# ...
|
644
728
|
end
|
645
729
|
end
|
646
730
|
```
|
647
731
|
|
648
|
-
With the above configuration, Rodauth routes will only be accessible via JSON
|
649
|
-
requests. If you still want to allow HTML access alongside JSON, change `json:
|
650
|
-
:only` to `json: true`.
|
651
|
-
|
652
|
-
Emails will automatically work in JSON-only mode, because `Rodauth::Rails::App`
|
653
|
-
comes with Roda's `render` plugin loaded. They are customized the same as in
|
654
|
-
the non-JSON case.
|
655
|
-
|
656
732
|
## OmniAuth
|
657
733
|
|
658
734
|
While Rodauth doesn't yet come with [OmniAuth] integration, we can build one
|
@@ -976,6 +1052,7 @@ conduct](https://github.com/janko/rodauth-rails/blob/master/CODE_OF_CONDUCT.md).
|
|
976
1052
|
[sms_codes]: http://rodauth.jeremyevans.net/rdoc/files/doc/sms_codes_rdoc.html
|
977
1053
|
[recovery_codes]: http://rodauth.jeremyevans.net/rdoc/files/doc/recovery_codes_rdoc.html
|
978
1054
|
[webauthn]: http://rodauth.jeremyevans.net/rdoc/files/doc/webauthn_rdoc.html
|
1055
|
+
[json]: http://rodauth.jeremyevans.net/rdoc/files/doc/json_rdoc.html
|
979
1056
|
[jwt]: http://rodauth.jeremyevans.net/rdoc/files/doc/jwt_rdoc.html
|
980
1057
|
[email_auth]: http://rodauth.jeremyevans.net/rdoc/files/doc/email_auth_rdoc.html
|
981
1058
|
[audit_logging]: http://rodauth.jeremyevans.net/rdoc/files/doc/audit_logging_rdoc.html
|
@@ -13,14 +13,8 @@ module Rodauth
|
|
13
13
|
source_root "#{__dir__}/templates"
|
14
14
|
namespace "rodauth:install"
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
# value instead.
|
19
|
-
def self.default_value_for_option(name, options)
|
20
|
-
name == :api ? options[:default] : super
|
21
|
-
end
|
22
|
-
|
23
|
-
class_option :api, type: :boolean, desc: "Generate JSON-only configuration"
|
16
|
+
class_option :json, type: :boolean, desc: "Configure JSON support"
|
17
|
+
class_option :jwt, type: :boolean, desc: "Configure JWT support"
|
24
18
|
|
25
19
|
def create_rodauth_migration
|
26
20
|
return unless defined?(ActiveRecord::Base)
|
@@ -83,17 +77,17 @@ module Rodauth
|
|
83
77
|
end
|
84
78
|
end
|
85
79
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
80
|
+
def json?
|
81
|
+
options[:json]
|
82
|
+
end
|
83
|
+
|
84
|
+
def jwt?
|
85
|
+
options[:jwt] || Rodauth::Rails.api_only?
|
92
86
|
end
|
93
87
|
|
94
88
|
def migration_features
|
95
89
|
features = [:base, :reset_password, :verify_account, :verify_login_change]
|
96
|
-
features << :remember unless
|
90
|
+
features << :remember unless jwt?
|
97
91
|
features
|
98
92
|
end
|
99
93
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class RodauthApp < Rodauth::Rails::App
|
2
|
-
configure
|
2
|
+
configure do
|
3
3
|
# List of authentication features that are loaded.
|
4
4
|
enable :create_account, :verify_account, :verify_account_grace_period,
|
5
|
-
:login, :logout
|
5
|
+
:login, :logout<%= ", :remember" unless jwt? %>,
|
6
6
|
:reset_password, :change_password, :change_password_notify,
|
7
7
|
:change_login, :verify_login_change,
|
8
|
-
:close_account
|
8
|
+
:close_account<%= ", :json" if json? %><%= ", :jwt" if jwt? %>
|
9
9
|
|
10
10
|
# See the Rodauth documentation for the list of available config options:
|
11
11
|
# http://rodauth.jeremyevans.net/documentation.html
|
@@ -14,6 +14,16 @@ class RodauthApp < Rodauth::Rails::App
|
|
14
14
|
# The secret key used for hashing public-facing tokens for various features.
|
15
15
|
# Defaults to Rails `secret_key_base`, but you can use your own secret key.
|
16
16
|
# hmac_secret "<%= SecureRandom.hex(64) %>"
|
17
|
+
<% if jwt? -%>
|
18
|
+
|
19
|
+
# Set JWT secret, which is used to cryptographically protect the token.
|
20
|
+
jwt_secret "<%= SecureRandom.hex(64) %>"
|
21
|
+
<% end -%>
|
22
|
+
<% if json? || jwt? -%>
|
23
|
+
|
24
|
+
# Accept only JSON requests.
|
25
|
+
only_json? true
|
26
|
+
<% end -%>
|
17
27
|
|
18
28
|
# Specify the controller used for view rendering and CSRF verification.
|
19
29
|
rails_controller { RodauthController }
|
@@ -42,18 +52,6 @@ class RodauthApp < Rodauth::Rails::App
|
|
42
52
|
|
43
53
|
# Redirect to the app from login and registration pages if already logged in.
|
44
54
|
# already_logged_in { redirect login_redirect }
|
45
|
-
<% if api_only? -%>
|
46
|
-
|
47
|
-
# ==> JWT
|
48
|
-
# Set JWT secret, which is used to cryptographically protect the token.
|
49
|
-
jwt_secret "<%= SecureRandom.hex(64) %>"
|
50
|
-
|
51
|
-
# Don't require login confirmation param.
|
52
|
-
require_login_confirmation? false
|
53
|
-
|
54
|
-
# Don't require password confirmation param.
|
55
|
-
require_password_confirmation? false
|
56
|
-
<% end -%>
|
57
55
|
|
58
56
|
# ==> Emails
|
59
57
|
# Uncomment the lines below once you've imported mailer views.
|
@@ -80,14 +78,14 @@ class RodauthApp < Rodauth::Rails::App
|
|
80
78
|
# db.after_commit { email.deliver_later }
|
81
79
|
# end
|
82
80
|
|
83
|
-
# In the meantime you can tweak settings for emails created by Rodauth
|
81
|
+
# In the meantime, you can tweak settings for emails created by Rodauth.
|
84
82
|
# email_subject_prefix "[MyApp] "
|
85
83
|
# email_from "noreply@myapp.com"
|
86
84
|
# send_email(&:deliver_later)
|
87
85
|
# reset_password_email_body { "Click here to reset your password: #{reset_password_email_link}" }
|
88
86
|
|
89
87
|
# ==> Flash
|
90
|
-
<% unless
|
88
|
+
<% unless json? || jwt? -%>
|
91
89
|
# Match flash keys with ones already used in the Rails app.
|
92
90
|
# flash_notice_key :success # default is :notice
|
93
91
|
# flash_error_key :error # default is :alert
|
@@ -107,7 +105,7 @@ class RodauthApp < Rodauth::Rails::App
|
|
107
105
|
|
108
106
|
# Change minimum number of password characters required when creating an account.
|
109
107
|
# password_minimum_length 8
|
110
|
-
<% unless
|
108
|
+
<% unless jwt? -%>
|
111
109
|
|
112
110
|
# ==> Remember Feature
|
113
111
|
# Remember all logged in users.
|
@@ -128,13 +126,14 @@ class RodauthApp < Rodauth::Rails::App
|
|
128
126
|
|
129
127
|
# Perform additional actions after the account is created.
|
130
128
|
# after_create_account do
|
131
|
-
# Profile.create!(account_id:
|
129
|
+
# Profile.create!(account_id: account_id, name: param("name"))
|
132
130
|
# end
|
133
131
|
|
134
132
|
# Do additional cleanup after the account is closed.
|
135
133
|
# after_close_account do
|
136
|
-
# Profile.find_by!(account_id:
|
134
|
+
# Profile.find_by!(account_id: account_id).destroy
|
137
135
|
# end
|
136
|
+
<% unless json? || jwt? -%>
|
138
137
|
|
139
138
|
# ==> Redirects
|
140
139
|
# Redirect to home page after logout.
|
@@ -145,6 +144,7 @@ class RodauthApp < Rodauth::Rails::App
|
|
145
144
|
|
146
145
|
# Redirect to login page after password reset.
|
147
146
|
reset_password_redirect { login_path }
|
147
|
+
<% end -%>
|
148
148
|
|
149
149
|
# ==> Deadlines
|
150
150
|
# Change default deadlines for some actions.
|
@@ -156,14 +156,13 @@ class RodauthApp < Rodauth::Rails::App
|
|
156
156
|
|
157
157
|
# ==> Multiple configurations
|
158
158
|
# configure(:admin) do
|
159
|
-
# enable :http_basic_auth
|
160
|
-
#
|
159
|
+
# enable :http_basic_auth # enable different set of features
|
161
160
|
# prefix "/admin"
|
162
|
-
#
|
161
|
+
# session_key_prefix "admin_"
|
163
162
|
# end
|
164
163
|
|
165
164
|
route do |r|
|
166
|
-
<% unless
|
165
|
+
<% unless jwt? -%>
|
167
166
|
rodauth.load_memory # autologin remembered users
|
168
167
|
|
169
168
|
<% end -%>
|
data/lib/rodauth/rails.rb
CHANGED
data/lib/rodauth/rails/app.rb
CHANGED
@@ -12,22 +12,16 @@ module Rodauth
|
|
12
12
|
plugin :hooks
|
13
13
|
plugin :render, layout: false
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
15
|
+
if defined?(ActionDispatch::Flash) # not in API-only mode
|
16
|
+
require "rodauth/rails/app/flash"
|
17
|
+
plugin Flash
|
18
|
+
end
|
20
19
|
|
21
|
-
|
20
|
+
def self.configure(name = nil, **options, &block)
|
21
|
+
plugin :rodauth, name: name, csrf: false, flash: false, json: true, **options do
|
22
22
|
# load the Rails integration
|
23
23
|
enable :rails
|
24
24
|
|
25
|
-
if options[:json] == :only && ActionPack.version >= Gem::Version.new("5.0")
|
26
|
-
rails_controller { ActionController::API }
|
27
|
-
else
|
28
|
-
rails_controller { ActionController::Base }
|
29
|
-
end
|
30
|
-
|
31
25
|
# database functions are more complex to set up, so disable them by default
|
32
26
|
use_database_authentication_functions? false
|
33
27
|
|
@@ -30,10 +30,12 @@ module Rodauth
|
|
30
30
|
rails_request.flash
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
if ActionPack.version >= Gem::Version.new("5.0")
|
34
|
+
def commit_flash
|
35
35
|
rails_request.commit_flash
|
36
|
-
|
36
|
+
end
|
37
|
+
else
|
38
|
+
def commit_flash
|
37
39
|
# ActionPack 4.2 automatically commits flash
|
38
40
|
end
|
39
41
|
end
|
@@ -192,6 +192,14 @@ module Rodauth
|
|
192
192
|
defined?(ActionController::API) && rails_controller <= ActionController::API
|
193
193
|
end
|
194
194
|
|
195
|
+
def rails_controller
|
196
|
+
if only_json? && Rodauth::Rails.api_only?
|
197
|
+
ActionController::API
|
198
|
+
else
|
199
|
+
ActionController::Base
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
195
203
|
# ActionMailer subclass for correct email delivering.
|
196
204
|
class Mailer < ActionMailer::Base
|
197
205
|
def create_email(**options)
|
data/rodauth-rails.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
19
|
spec.add_dependency "railties", ">= 4.2", "< 7"
|
20
|
-
spec.add_dependency "rodauth", "~> 2.
|
20
|
+
spec.add_dependency "rodauth", "~> 2.9"
|
21
21
|
spec.add_dependency "sequel-activerecord_connection", "~> 1.1"
|
22
22
|
spec.add_dependency "tilt"
|
23
23
|
spec.add_dependency "bcrypt"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rodauth-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -36,14 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '2.
|
39
|
+
version: '2.9'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '2.
|
46
|
+
version: '2.9'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sequel-activerecord_connection
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,7 +216,7 @@ homepage: https://github.com/janko/rodauth-rails
|
|
216
216
|
licenses:
|
217
217
|
- MIT
|
218
218
|
metadata: {}
|
219
|
-
post_install_message:
|
219
|
+
post_install_message:
|
220
220
|
rdoc_options: []
|
221
221
|
require_paths:
|
222
222
|
- lib
|
@@ -231,8 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
231
|
- !ruby/object:Gem::Version
|
232
232
|
version: '0'
|
233
233
|
requirements: []
|
234
|
-
rubygems_version: 3.
|
235
|
-
signing_key:
|
234
|
+
rubygems_version: 3.2.3
|
235
|
+
signing_key:
|
236
236
|
specification_version: 4
|
237
237
|
summary: Provides Rails integration for Rodauth.
|
238
238
|
test_files: []
|