rodauth-rails 0.3.1 → 0.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.md +6 -0
- data/README.md +20 -19
- data/lib/generators/rodauth/install_generator.rb +10 -5
- data/lib/generators/rodauth/templates/{lib → app/lib}/rodauth_app.rb +20 -2
- data/lib/generators/rodauth/templates/config/initializers/sequel.rb +1 -1
- data/lib/generators/rodauth/templates/db/migrate/create_rodauth.rb +9 -0
- data/lib/rodauth/rails.rb +1 -1
- data/lib/rodauth/rails/app.rb +5 -4
- data/lib/rodauth/rails/app/flash.rb +1 -1
- data/lib/rodauth/rails/feature.rb +1 -1
- data/lib/rodauth/rails/version.rb +5 -0
- data/rodauth-rails.gemspec +3 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd5d6b153ae21b024570d612aff57a2c0d6f090f2215723b25bbc362ee743c9b
|
4
|
+
data.tar.gz: e6aac1fe20d00bd4c94559c74dbc56bd971da4404d086ec3193db8e06fe2a3bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83a5c386eaf39c7aa9b0536e9aed25e8a61bc069e2388bee556b28e9ee00941528fd5431199711d77a28212d281376258ecf0b914d6aa928954d8d99543b827b
|
7
|
+
data.tar.gz: 815d7fee34954d2f512e4532d02bb9d183ad9bde92fc622d522c517cd9db575c8fef98c857dce81c8329cd1798481b8e2f4609390b2472d83825d393886a3576
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -14,6 +14,11 @@ Add the gem to your Gemfile:
|
|
14
14
|
|
15
15
|
```rb
|
16
16
|
gem "rodauth-rails", "~> 0.3"
|
17
|
+
|
18
|
+
# gem "jwt", require: false # for JWT feature
|
19
|
+
# gem "rotp", require: false # for OTP feature
|
20
|
+
# gem "rqrcode", require: false # for OTP feature
|
21
|
+
# gem "webauthn", require: false # for WebAuthn feature
|
17
22
|
```
|
18
23
|
|
19
24
|
Then run `bundle install`.
|
@@ -29,7 +34,7 @@ The generator will create the following files:
|
|
29
34
|
* Rodauth migration at `db/migrate/*_create_rodauth.rb`
|
30
35
|
* Rodauth initializer at `config/initializers/rodauth.rb`
|
31
36
|
* Sequel initializer at `config/initializers/sequel.rb` for ActiveRecord integration
|
32
|
-
* Rodauth app at `lib/rodauth_app.rb`
|
37
|
+
* Rodauth app at `app/lib/rodauth_app.rb`
|
33
38
|
* Rodauth controller at `app/controllers/rodauth_controller.rb`
|
34
39
|
* Account model at `app/models/account.rb`
|
35
40
|
|
@@ -88,12 +93,12 @@ DB = Sequel.postgres(extensions: :activerecord_connection)
|
|
88
93
|
|
89
94
|
### Rodauth app
|
90
95
|
|
91
|
-
Your Rodauth app is created in the `lib/` directory,
|
92
|
-
set of authentication features enabled, as well as extensive examples
|
93
|
-
you can configure authentication behaviour.
|
96
|
+
Your Rodauth app is created in the `app/lib/` directory, and comes with a
|
97
|
+
default set of authentication features enabled, as well as extensive examples
|
98
|
+
on ways you can configure authentication behaviour.
|
94
99
|
|
95
100
|
```rb
|
96
|
-
# lib/rodauth_app.rb
|
101
|
+
# app/lib/rodauth_app.rb
|
97
102
|
class RodauthApp < Rodauth::Rails::App
|
98
103
|
configure do
|
99
104
|
# authentication configuration
|
@@ -105,19 +110,6 @@ class RodauthApp < Rodauth::Rails::App
|
|
105
110
|
end
|
106
111
|
```
|
107
112
|
|
108
|
-
Note that Rails doesn't autoload files in the `lib/` directory by default, so
|
109
|
-
make sure to add `lib/` to your `config.autoload_paths`:
|
110
|
-
|
111
|
-
```rb
|
112
|
-
# config/application.rb
|
113
|
-
module YourApp
|
114
|
-
class Application < Rails::Application
|
115
|
-
# ...
|
116
|
-
config.autoload_paths += %W[#{config.root}/lib]
|
117
|
-
end
|
118
|
-
end
|
119
|
-
```
|
120
|
-
|
121
113
|
### Controller
|
122
114
|
|
123
115
|
Your Rodauth app will by default use `RodauthController` for view rendering
|
@@ -500,18 +492,26 @@ end
|
|
500
492
|
|
501
493
|
## Working with JWT
|
502
494
|
|
503
|
-
To use Rodauth's [JWT feature], you'll need to load Roda's JSON support
|
495
|
+
To use Rodauth's [JWT feature], you'll need to load Roda's JSON support in
|
496
|
+
`configure`:
|
504
497
|
|
505
498
|
```rb
|
506
499
|
# lib/rodauth_app.rb
|
507
500
|
class RodauthApp < Rodauth::Rails::App
|
508
501
|
configure(json: true) do
|
509
502
|
enable :jwt
|
503
|
+
jwt_secret "...your secret key..."
|
510
504
|
# your configuration
|
511
505
|
end
|
512
506
|
end
|
513
507
|
```
|
514
508
|
|
509
|
+
Make sure to store the `jwt_secret` in a secure place, such as Rails
|
510
|
+
credentials or environment variables.
|
511
|
+
|
512
|
+
Rodauth's JWT feature depends on the [JWT gem], so make sure to add it to your
|
513
|
+
Gemfile.
|
514
|
+
|
515
515
|
## Testing
|
516
516
|
|
517
517
|
If you're writing system tests, it's generally better to go through the actual
|
@@ -634,6 +634,7 @@ conduct](https://github.com/janko/rodauth-rails/blob/master/CODE_OF_CONDUCT.md).
|
|
634
634
|
[rendering views outside of controllers]: https://blog.bigbinary.com/2016/01/08/rendering-views-outside-of-controllers-in-rails-5.html
|
635
635
|
[feature documentation]: http://rodauth.jeremyevans.net/documentation.html
|
636
636
|
[JWT feature]: http://rodauth.jeremyevans.net/rdoc/files/doc/jwt_rdoc.html
|
637
|
+
[JWT gem]: https://github.com/jwt/ruby-jwt
|
637
638
|
[Bootstrap]: https://getbootstrap.com/
|
638
639
|
[Roda]: http://roda.jeremyevans.net/
|
639
640
|
[HMAC]: http://rodauth.jeremyevans.net/rdoc/files/README_rdoc.html#label-HMAC
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require "rails/generators/base"
|
2
2
|
require "rails/generators/active_record/migration"
|
3
3
|
|
4
|
+
require "securerandom"
|
5
|
+
|
4
6
|
module Rodauth
|
5
7
|
module Rails
|
6
8
|
module Generators
|
@@ -29,7 +31,7 @@ module Rodauth
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def create_rodauth_app
|
32
|
-
template "lib/rodauth_app.rb"
|
34
|
+
template "app/lib/rodauth_app.rb"
|
33
35
|
end
|
34
36
|
|
35
37
|
def create_rodauth_controller
|
@@ -45,12 +47,13 @@ module Rodauth
|
|
45
47
|
private
|
46
48
|
|
47
49
|
def db_migrate_path
|
48
|
-
return "db/migrate" unless
|
50
|
+
return "db/migrate" unless ActiveRecord.version >= Gem::Version.new("5.0")
|
51
|
+
|
49
52
|
super
|
50
53
|
end
|
51
54
|
|
52
55
|
def migration_version
|
53
|
-
if
|
56
|
+
if ActiveRecord.version >= Gem::Version.new("5.0")
|
54
57
|
"[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
|
55
58
|
end
|
56
59
|
end
|
@@ -67,8 +70,10 @@ module Rodauth
|
|
67
70
|
ActiveRecord::Base.connection_config.fetch(:adapter)
|
68
71
|
end
|
69
72
|
|
70
|
-
def
|
71
|
-
|
73
|
+
def api_only?
|
74
|
+
return false if ::Rails.gem_version < Gem::Version.new("5.0")
|
75
|
+
|
76
|
+
::Rails.application.config.api_only
|
72
77
|
end
|
73
78
|
end
|
74
79
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
class RodauthApp < Rodauth::Rails::App
|
2
|
-
configure do
|
2
|
+
configure<%= " json: :only" if api_only? %> do
|
3
3
|
# List of authentication features that are loaded.
|
4
4
|
enable :create_account, :verify_account, :verify_account_grace_period,
|
5
|
-
:login, :
|
5
|
+
:login, :logout, <%= api_only? ? ":jwt" : ":remember" %>,
|
6
6
|
:reset_password, :change_password, :change_password_notify,
|
7
7
|
:change_login, :verify_login_change,
|
8
8
|
:close_account
|
@@ -38,6 +38,18 @@ class RodauthApp < Rodauth::Rails::App
|
|
38
38
|
|
39
39
|
# Redirect to the app from login and registration pages if already logged in.
|
40
40
|
# already_logged_in { redirect login_redirect }
|
41
|
+
<% if api_only? -%>
|
42
|
+
|
43
|
+
# ==> JWT
|
44
|
+
# Set JWT secret, which is used to cryptographically protect the token.
|
45
|
+
jwt_secret "<%= SecureRandom.hex(64) %>"
|
46
|
+
|
47
|
+
# Don't require login confirmation param.
|
48
|
+
require_login_confirmation? false
|
49
|
+
|
50
|
+
# Don't require password confirmation param.
|
51
|
+
require_password_confirmation? false
|
52
|
+
<% end -%>
|
41
53
|
|
42
54
|
# ==> Emails
|
43
55
|
# Uncomment the lines below once you've imported mailer views.
|
@@ -75,10 +87,12 @@ class RodauthApp < Rodauth::Rails::App
|
|
75
87
|
# reset_password_email_body { "Click here to reset your password: #{reset_password_email_link}" }
|
76
88
|
|
77
89
|
# ==> Flash
|
90
|
+
<% unless api_only? -%>
|
78
91
|
# Match flash keys with ones already used in the Rails app.
|
79
92
|
# flash_notice_key :success # default is :notice
|
80
93
|
# flash_error_key :error # default is :alert
|
81
94
|
|
95
|
+
<% end -%>
|
82
96
|
# Override default flash messages.
|
83
97
|
# create_account_notice_flash "Your account has been created. Please verify your account by visiting the confirmation link sent to your email address."
|
84
98
|
# require_login_error_flash "Login is required for accessing this page"
|
@@ -93,6 +107,7 @@ class RodauthApp < Rodauth::Rails::App
|
|
93
107
|
|
94
108
|
# Change minimum number of password characters required when creating an account.
|
95
109
|
# password_minimum_length 8
|
110
|
+
<% unless api_only? -%>
|
96
111
|
|
97
112
|
# ==> Remember Feature
|
98
113
|
# Remember all logged in users.
|
@@ -103,6 +118,7 @@ class RodauthApp < Rodauth::Rails::App
|
|
103
118
|
|
104
119
|
# Extend user's remember period when remembered via a cookie
|
105
120
|
extend_remember_deadline? true
|
121
|
+
<% end -%>
|
106
122
|
|
107
123
|
# ==> Hooks
|
108
124
|
# Validate custom fields in the create account form.
|
@@ -147,8 +163,10 @@ class RodauthApp < Rodauth::Rails::App
|
|
147
163
|
# end
|
148
164
|
|
149
165
|
route do |r|
|
166
|
+
<% unless api_only? -%>
|
150
167
|
rodauth.load_memory # autologin remembered users
|
151
168
|
|
169
|
+
<% end -%>
|
152
170
|
r.rodauth # route rodauth requests
|
153
171
|
|
154
172
|
# ==> Authenticating Requests
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "sequel/core"
|
2
2
|
|
3
3
|
# initialize Sequel and have it reuse Active Record's database connection
|
4
|
-
|
4
|
+
<% if RUBY_ENGINE == "jruby" -%>
|
5
5
|
DB = Sequel.connect("jdbc:<%= sequel_adapter %>://", extensions: :activerecord_connection)
|
6
6
|
<% else -%>
|
7
7
|
DB = Sequel.<%= sequel_adapter %>(extensions: :activerecord_connection)
|
@@ -44,12 +44,21 @@ class CreateRodauth < ActiveRecord::Migration<%= migration_version %>
|
|
44
44
|
t.datetime :deadline, null: false
|
45
45
|
end
|
46
46
|
|
47
|
+
<% unless api_only? -%>
|
47
48
|
# Used by the remember me feature
|
48
49
|
create_table :account_remember_keys do |t|
|
49
50
|
t.foreign_key :accounts, column: :id
|
50
51
|
t.string :key, null: false
|
51
52
|
t.datetime :deadline, null: false
|
52
53
|
end
|
54
|
+
<% else -%>
|
55
|
+
# # Used by the remember me feature
|
56
|
+
# create_table :account_remember_keys do |t|
|
57
|
+
# t.foreign_key :accounts, column: :id
|
58
|
+
# t.string :key, null: false
|
59
|
+
# t.datetime :deadline, null: false
|
60
|
+
# end
|
61
|
+
<% end -%>
|
53
62
|
|
54
63
|
# # Used by the audit logging feature
|
55
64
|
# create_table :account_authentication_audit_logs do |t|
|
data/lib/rodauth/rails.rb
CHANGED
data/lib/rodauth/rails/app.rb
CHANGED
@@ -4,15 +4,16 @@ module Rodauth
|
|
4
4
|
module Rails
|
5
5
|
# The superclass for creating a Rodauth middleware.
|
6
6
|
class App < Roda
|
7
|
-
require "rodauth/rails/app/flash"
|
8
|
-
|
9
7
|
plugin :middleware
|
10
8
|
plugin :hooks
|
11
9
|
plugin :render, layout: false
|
12
10
|
|
13
|
-
plugin Flash
|
14
|
-
|
15
11
|
def self.configure(name = nil, **options, &block)
|
12
|
+
unless options[:json] == :only
|
13
|
+
require "rodauth/rails/app/flash"
|
14
|
+
plugin Flash
|
15
|
+
end
|
16
|
+
|
16
17
|
plugin :rodauth, name: name, csrf: false, flash: false, **options do
|
17
18
|
# load the Rails integration
|
18
19
|
enable :rails
|
@@ -92,7 +92,7 @@ module Rodauth
|
|
92
92
|
request = ActionDispatch::Request.new(scope.env)
|
93
93
|
instance = rails_controller.new
|
94
94
|
|
95
|
-
if ActionPack.version >= Gem::Version.new("5.0
|
95
|
+
if ActionPack.version >= Gem::Version.new("5.0")
|
96
96
|
instance.set_request! request
|
97
97
|
instance.set_response! rails_controller.make_response!(request)
|
98
98
|
else
|
data/rodauth-rails.gemspec
CHANGED
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.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- lib/generators/rodauth/install_generator.rb
|
100
100
|
- lib/generators/rodauth/mailer_generator.rb
|
101
101
|
- lib/generators/rodauth/templates/app/controllers/rodauth_controller.rb
|
102
|
+
- lib/generators/rodauth/templates/app/lib/rodauth_app.rb
|
102
103
|
- lib/generators/rodauth/templates/app/mailers/rodauth_mailer.rb
|
103
104
|
- lib/generators/rodauth/templates/app/models/account.rb
|
104
105
|
- lib/generators/rodauth/templates/app/views/rodauth/_email_auth_request_form.html.erb
|
@@ -164,7 +165,6 @@ files:
|
|
164
165
|
- lib/generators/rodauth/templates/config/initializers/rodauth.rb
|
165
166
|
- lib/generators/rodauth/templates/config/initializers/sequel.rb
|
166
167
|
- lib/generators/rodauth/templates/db/migrate/create_rodauth.rb
|
167
|
-
- lib/generators/rodauth/templates/lib/rodauth_app.rb
|
168
168
|
- lib/generators/rodauth/views_generator.rb
|
169
169
|
- lib/rodauth-rails.rb
|
170
170
|
- lib/rodauth/features/rails.rb
|
@@ -175,6 +175,7 @@ files:
|
|
175
175
|
- lib/rodauth/rails/feature.rb
|
176
176
|
- lib/rodauth/rails/middleware.rb
|
177
177
|
- lib/rodauth/rails/railtie.rb
|
178
|
+
- lib/rodauth/rails/version.rb
|
178
179
|
- rodauth-rails.gemspec
|
179
180
|
homepage: https://github.com/janko/rodauth-rails
|
180
181
|
licenses:
|