rails_jwt_auth 0.18.1 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|