rails_jwt_auth 0.18.1 → 0.19.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 +5 -5
- data/README.md +6 -8
- data/app/controllers/concerns/rails_jwt_auth/params_helper.rb +1 -3
- data/app/controllers/rails_jwt_auth/invitations_controller.rb +1 -2
- data/app/mailers/rails_jwt_auth/mailer.rb +3 -3
- data/app/models/concerns/rails_jwt_auth/invitable.rb +30 -24
- data/lib/generators/rails_jwt_auth/install_generator.rb +2 -2
- data/lib/generators/templates/initializer.rb +5 -6
- data/lib/rails_jwt_auth.rb +21 -21
- data/lib/rails_jwt_auth/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 762f53596609290e2f1ac7d6091796fd55167d96e5bb77ba7566336b5fea3dd4
|
4
|
+
data.tar.gz: caa5365c0300a1adf1b9ec6e3f0ac9354487171ef9c7813717439d126a39bed5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd76e94ecc84e8cb1f0ff57754fec3eb21202ed0560b3b1d3d16488d982510169d8f37e4b66348b78386a0d70fd2f098c99ca6d02aa9e3da359ef8b15ec77c7a
|
7
|
+
data.tar.gz: 846793af29ba968cc33e81762b93e28030efc48045086b5a661c603fcdfa25577f4c84e7675237951b215e9df1f87fe61ade6e776c893c1f03feaa33366ade50
|
data/README.md
CHANGED
@@ -51,7 +51,7 @@ You can edit configuration options into `config/initializers/auth_token_auth.rb`
|
|
51
51
|
| set_password_url | password_path | Url used to create email link with set password token |
|
52
52
|
| deliver_later | false | Uses `deliver_later` method to send emails |
|
53
53
|
| invitation_expiration_time | 2.days | Time an invitation is valid and can be accepted |
|
54
|
-
|
|
54
|
+
| accept_invitation_url | invitations_path | URL used to create email link with invitation token |
|
55
55
|
|
56
56
|
## Authenticatable
|
57
57
|
|
@@ -118,7 +118,7 @@ change_table :users do |t|
|
|
118
118
|
t.string :unconfirmed_email
|
119
119
|
t.string :confirmation_token
|
120
120
|
t.datetime :confirmation_sent_at
|
121
|
-
t.datetime :
|
121
|
+
t.datetime :confirmed_at
|
122
122
|
end
|
123
123
|
```
|
124
124
|
|
@@ -420,7 +420,7 @@ Invitations api is provided by RailsJwtAuth::InvitationsController.
|
|
420
420
|
|
421
421
|
```js
|
422
422
|
{
|
423
|
-
url: host/
|
423
|
+
url: host/invitations,
|
424
424
|
method: POST,
|
425
425
|
data: {
|
426
426
|
invitation: {
|
@@ -435,14 +435,12 @@ Invitations api is provided by RailsJwtAuth::InvitationsController.
|
|
435
435
|
|
436
436
|
```js
|
437
437
|
{
|
438
|
-
url: host/
|
438
|
+
url: host/invitations/:invitation_token,
|
439
439
|
method: PUT,
|
440
440
|
data: {
|
441
|
-
|
442
|
-
invitation_token: "token",
|
441
|
+
invitation: {
|
443
442
|
password: '1234',
|
444
|
-
password_confirmation: '1234'
|
445
|
-
// More fields of your user...
|
443
|
+
password_confirmation: '1234'
|
446
444
|
}
|
447
445
|
}
|
448
446
|
}
|
@@ -29,9 +29,7 @@ module RailsJwtAuth
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def invitation_update_params
|
32
|
-
params.require(:
|
33
|
-
:password,
|
34
|
-
:password_confirmation)
|
32
|
+
params.require(:invitation).permit(:password, :password_confirmation)
|
35
33
|
end
|
36
34
|
end
|
37
35
|
end
|
@@ -11,8 +11,7 @@ module RailsJwtAuth
|
|
11
11
|
|
12
12
|
def update
|
13
13
|
attr_hash = invitation_update_params
|
14
|
-
|
15
|
-
user = RailsJwtAuth.model.where(invitation_token: token).first
|
14
|
+
user = RailsJwtAuth.model.where(invitation_token: params[:id]).first
|
16
15
|
user.assign_attributes attr_hash
|
17
16
|
user.accept_invitation!
|
18
17
|
|
@@ -56,13 +56,13 @@ if defined?(ActionMailer)
|
|
56
56
|
def send_invitation(user)
|
57
57
|
@user = user
|
58
58
|
|
59
|
-
if RailsJwtAuth.
|
60
|
-
url, params = RailsJwtAuth.
|
59
|
+
if RailsJwtAuth.accept_invitation_url
|
60
|
+
url, params = RailsJwtAuth.accept_invitation_url.split '?'
|
61
61
|
params = params ? params.split('&') : []
|
62
62
|
params.push("invitation_token=#{@user.invitation_token}")
|
63
63
|
@accept_invitation_url = "#{url}?#{params.join('&')}"
|
64
64
|
else
|
65
|
-
@accept_invitation_url =
|
65
|
+
@accept_invitation_url = invitations_url(invitation_token: @user.invitation_token)
|
66
66
|
end
|
67
67
|
|
68
68
|
subject = I18n.t('rails_jwt_auth.mailer.send_invitation.subject')
|
@@ -14,8 +14,6 @@ module RailsJwtAuth
|
|
14
14
|
field :invitation_sent_at, type: Time
|
15
15
|
field :invitation_accepted_at, type: Time
|
16
16
|
field :invitation_created_at, type: Time
|
17
|
-
|
18
|
-
index({invitation_token: 1}, {unique: true})
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -33,7 +31,6 @@ module RailsJwtAuth
|
|
33
31
|
#
|
34
32
|
# @return [user] The user created or found by email.
|
35
33
|
|
36
|
-
# rubocop:disable Metrics/AbcSize
|
37
34
|
def invite!(attributes={})
|
38
35
|
attrs = ActiveSupport::HashWithIndifferentAccess.new(attributes.to_h)
|
39
36
|
auth_field = RailsJwtAuth.auth_field_name
|
@@ -43,30 +40,10 @@ module RailsJwtAuth
|
|
43
40
|
|
44
41
|
record = RailsJwtAuth.model.find_or_initialize_by(auth_field => auth_attribute)
|
45
42
|
record.assign_attributes(attrs)
|
46
|
-
record.invitation_created_at = Time.now.utc if record.new_record?
|
47
|
-
|
48
|
-
unless record.password || record.password_digest
|
49
|
-
password = SecureRandom.base58(16)
|
50
|
-
record.password = password
|
51
|
-
record.password_confirmation = password
|
52
|
-
end
|
53
|
-
|
54
|
-
record.valid?
|
55
|
-
|
56
|
-
# Users that are registered and were not invited are not reinvitable
|
57
|
-
if !record.new_record? && !record.invited?
|
58
|
-
record.errors.add(RailsJwtAuth.auth_field_name, :taken)
|
59
|
-
end
|
60
|
-
|
61
|
-
# Users that have already accepted an invitation are not reinvitable
|
62
|
-
if !record.new_record? && record.invited? && record.invitation_accepted_at.present?
|
63
|
-
record.errors.add(RailsJwtAuth.auth_field_name, :taken)
|
64
|
-
end
|
65
43
|
|
66
|
-
record.invite!
|
44
|
+
record.invite!
|
67
45
|
record
|
68
46
|
end
|
69
|
-
# rubocop:enable Metrics/AbcSize
|
70
47
|
end
|
71
48
|
|
72
49
|
# Accept an invitation by clearing token and setting invitation_accepted_at
|
@@ -85,12 +62,37 @@ module RailsJwtAuth
|
|
85
62
|
end
|
86
63
|
end
|
87
64
|
|
65
|
+
# rubocop:disable Metrics/AbcSize
|
88
66
|
def invite!
|
67
|
+
self.invitation_created_at = Time.now.utc if new_record?
|
68
|
+
|
69
|
+
unless password || password_digest
|
70
|
+
passw = SecureRandom.base58(16)
|
71
|
+
self.password = passw
|
72
|
+
self.password_confirmation = passw
|
73
|
+
end
|
74
|
+
|
75
|
+
valid?
|
76
|
+
|
77
|
+
# Users that are registered and were not invited are not reinvitable
|
78
|
+
if !new_record? && !invited?
|
79
|
+
errors.add(RailsJwtAuth.auth_field_name, :taken)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Users that have already accepted an invitation are not reinvitable
|
83
|
+
if !new_record? && invited? && invitation_accepted_at.present?
|
84
|
+
errors.add(RailsJwtAuth.auth_field_name, :taken)
|
85
|
+
end
|
86
|
+
|
87
|
+
return self unless errors.empty?
|
88
|
+
|
89
89
|
generate_invitation_token if invitation_token.nil?
|
90
90
|
self.invitation_sent_at = Time.now.utc
|
91
91
|
|
92
92
|
send_invitation_mail if save(validate: false)
|
93
|
+
self
|
93
94
|
end
|
95
|
+
# rubocop:enable Metrics/AbcSize
|
94
96
|
|
95
97
|
def invited?
|
96
98
|
(persisted? && invitation_token.present?)
|
@@ -104,6 +106,10 @@ module RailsJwtAuth
|
|
104
106
|
invited? && invitation_period_valid?
|
105
107
|
end
|
106
108
|
|
109
|
+
def accepted_invitation?
|
110
|
+
invitation_token.nil? && invitation_accepted_at.present?
|
111
|
+
end
|
112
|
+
|
107
113
|
protected
|
108
114
|
|
109
115
|
def generate_invitation_token
|
@@ -2,7 +2,7 @@ class RailsJwtAuth::InstallGenerator < Rails::Generators::Base
|
|
2
2
|
source_root File.expand_path('../../templates', __FILE__)
|
3
3
|
|
4
4
|
def create_initializer_file
|
5
|
-
copy_file
|
5
|
+
copy_file 'initializer.rb', 'config/initializers/rails_jwt_auth.rb'
|
6
6
|
end
|
7
7
|
|
8
8
|
def create_routes
|
@@ -12,6 +12,6 @@ class RailsJwtAuth::InstallGenerator < Rails::Generators::Base
|
|
12
12
|
route "resource :confirmation, controller: 'rails_jwt_auth/confirmations', only: [:create, :update]"
|
13
13
|
route "resource :password, controller: 'rails_jwt_auth/passwords', only: [:create, :update]"
|
14
14
|
|
15
|
-
route "resource :
|
15
|
+
route "resource :invitations, controller: 'rails_jwt_auth/invitations', only: [:create, :update]"
|
16
16
|
end
|
17
17
|
end
|
@@ -18,7 +18,7 @@ RailsJwtAuth.setup do |config|
|
|
18
18
|
#config.jwt_issuer = 'RailsJwtAuth'
|
19
19
|
|
20
20
|
# number of simultaneously sessions for an user
|
21
|
-
#config.
|
21
|
+
#config.simultaneous_sessions = 2
|
22
22
|
|
23
23
|
# mailer sender
|
24
24
|
#config.mailer_sender = 'initialize-mailer_sender@example.com'
|
@@ -33,6 +33,7 @@ RailsJwtAuth.setup do |config|
|
|
33
33
|
#config.reset_password_url = 'http://frontend.com/reset_password'
|
34
34
|
|
35
35
|
# url used to create email link with set password token
|
36
|
+
# by set_and_send_password_instructions method
|
36
37
|
#config.set_password_url = 'http://frontend.com/set_password'
|
37
38
|
|
38
39
|
# expiration time for reset password tokens
|
@@ -41,11 +42,9 @@ RailsJwtAuth.setup do |config|
|
|
41
42
|
# uses deliver_later to send emails instead of deliver method
|
42
43
|
#config.deliver_later = false
|
43
44
|
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# Time an invitation is valid after sent
|
45
|
+
# time an invitation is valid after sent
|
47
46
|
# config.invitation_expiration_time = 2.days
|
48
|
-
|
49
|
-
#
|
47
|
+
|
48
|
+
# url used to create email link with activation token parameter to accept invitation
|
50
49
|
# config.accept_invitation_url = 'http://frontend.com/accept_invitation'
|
51
50
|
end
|
data/lib/rails_jwt_auth.rb
CHANGED
@@ -1,59 +1,59 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'warden'
|
2
|
+
require 'bcrypt'
|
3
3
|
|
4
|
-
require
|
4
|
+
require 'rails_jwt_auth/engine'
|
5
5
|
|
6
6
|
module RailsJwtAuth
|
7
7
|
mattr_accessor :model_name
|
8
|
-
|
8
|
+
self.model_name = 'User'
|
9
9
|
|
10
10
|
mattr_accessor :auth_field_name
|
11
|
-
|
11
|
+
self.auth_field_name = 'email'
|
12
12
|
|
13
13
|
mattr_accessor :auth_field_email
|
14
|
-
|
14
|
+
self.auth_field_email = true
|
15
15
|
|
16
16
|
mattr_accessor :email_regex
|
17
|
-
|
17
|
+
self.email_regex = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
18
18
|
|
19
19
|
mattr_accessor :jwt_expiration_time
|
20
|
-
|
20
|
+
self.jwt_expiration_time = 7.days
|
21
21
|
|
22
22
|
mattr_accessor :jwt_issuer
|
23
|
-
|
23
|
+
self.jwt_issuer = 'RailsJwtAuth'
|
24
24
|
|
25
25
|
mattr_accessor :simultaneous_sessions
|
26
|
-
|
26
|
+
self.simultaneous_sessions = 2
|
27
27
|
|
28
28
|
mattr_accessor :mailer_sender
|
29
|
-
|
29
|
+
self.mailer_sender = 'initialize-mailer_sender@example.com'
|
30
30
|
|
31
31
|
mattr_accessor :confirmation_url
|
32
|
-
|
32
|
+
self.confirmation_url = nil
|
33
33
|
|
34
34
|
mattr_accessor :confirmation_expiration_time
|
35
|
-
|
35
|
+
self.confirmation_expiration_time = 1.day
|
36
36
|
|
37
37
|
mattr_accessor :reset_password_url
|
38
|
-
|
38
|
+
self.reset_password_url = nil
|
39
39
|
|
40
40
|
mattr_accessor :set_password_url
|
41
|
-
|
41
|
+
self.set_password_url = nil
|
42
42
|
|
43
43
|
mattr_accessor :reset_password_expiration_time
|
44
|
-
|
44
|
+
self.reset_password_expiration_time = 1.day
|
45
45
|
|
46
46
|
mattr_accessor :deliver_later
|
47
|
-
|
47
|
+
self.deliver_later = false
|
48
48
|
|
49
49
|
mattr_accessor :invitation_expiration_time
|
50
|
-
|
50
|
+
self.invitation_expiration_time = 2.days
|
51
51
|
|
52
|
-
mattr_accessor :
|
53
|
-
|
52
|
+
mattr_accessor :accept_invitation_url
|
53
|
+
self.accept_invitation_url = nil
|
54
54
|
|
55
55
|
def self.model
|
56
|
-
|
56
|
+
model_name.constantize
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.setup
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_jwt_auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rjurado
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: '0'
|
130
130
|
requirements: []
|
131
131
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.7.3
|
133
133
|
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: Rails jwt authentication.
|