devise_token_authenticatable 0.1.3 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 375295d26a44cdcc5dccfcdc3ff7656d9cdf4df17cb9d7e9ed02ed213f61a907
4
- data.tar.gz: 13dc2e748ae66eadf9085367da20016113f7271184c952f7772d6da92b8c1f6c
3
+ metadata.gz: 054cad82b8440b387847aa335eaf6a5f19b795f0b32ffbc4d6f8701d95f02811
4
+ data.tar.gz: 5ed7c55a1b40f7d4c2b7fa654d21159237cb2469b907d2d452a674e7ef9639ac
5
5
  SHA512:
6
- metadata.gz: f4821dcdac4f96c66b44c2fd081fa030508295ec759c9500e38efa7d5458f23006cd3e6fdb69cb2680c9aeac084cb8158f2dc418ebc0e3c45f9ad125c55c710f
7
- data.tar.gz: fda0f619bc558d6451bdaa2a25abdeaee73bdebe06a47600c05551aa5d6ee20d0aa0549ff65e02652084a5b5a2b08155a918a0088df0fbfadfdca49a6721d1d8
6
+ metadata.gz: d93c3bae83fc23566ba08b1efc3ea75756a3041435cde50fb00c169cdc618222d78f5f256442d0180eb6cf3cacc483a0a6f012f757c9dfdfe6b9ffa0704867d6
7
+ data.tar.gz: 373894492b060292563e2c582a78e3f60e8de1fa9f0e6a22af005626fd5128b56638a4e0d78ecc52e0dec2c6e2681583ccec94c92a1be47b831fb1637406a866
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- devise_token_authenticatable (0.1.3)
5
- devise (~> 4.4, >= 4.4.3)
4
+ devise_token_authenticatable (0.1.4)
5
+ devise (~> 4.0, >= 4.0.0)
6
6
  jwt (~> 2.1)
7
7
 
8
8
  GEM
data/README.md CHANGED
@@ -10,6 +10,15 @@ gem 'devise_token_authenticatable'
10
10
 
11
11
  ### Controllers
12
12
 
13
+ For the controllers only, we provide the generator to install the gem.
14
+ /!\ Warning, it will override `controllers/users/sessions_controller.rb` and `controllers/users/registrations_controller.rb` if they exist. /!\
15
+
16
+ ```ruby
17
+ rails g devise_token_authenticatable:initializer
18
+ ```
19
+
20
+ If you don't want to use the generator, you can install the gem manually (see below).
21
+
13
22
  Create an `users` directory in your `controllers` directory.
14
23
  In this `users` directory, create a `sessions` controller.
15
24
  Override the `create` action like this :
@@ -33,14 +42,6 @@ class Users::RegistrationsController < Devise::RegistrationsController
33
42
  end
34
43
  ```
35
44
 
36
- Add this in your application controller
37
-
38
- ```ruby
39
- class ApplicationController < ActionController::Base
40
- include Devise::Controllers::TokenAuthenticatable
41
- end
42
- ```
43
-
44
45
  Use "before_action :token_authenticate_user!" instead of "before_action :authenticate_user!"
45
46
 
46
47
  ### Models
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  end
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency('devise', '~> 4.4', '>= 4.4.3')
21
+ spec.add_dependency('devise', '~> 4.0', '>= 4.0.0')
22
22
  spec.add_dependency('jwt', '~> 2.1')
23
23
  spec.add_development_dependency 'bundler', '~> 1.16'
24
24
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -1,5 +1,11 @@
1
- require 'devise_token_authenticatable/controllers/token_authenticatable'
1
+ require 'devise'
2
2
  require 'devise_token_authenticatable/models/token_authenticatable'
3
3
  require 'devise_token_authenticatable/strategies/token_authenticatable'
4
+ require 'devise_token_authenticatable/rails'
5
+
6
+ module Devise
7
+ mattr_accessor :token_ip_verifier
8
+ @@token_ip_verifier = false
9
+ end
4
10
 
5
11
  Devise.add_module :token_authenticatable, controller: true, model: true, strategy: true, no_input: true
@@ -11,10 +11,20 @@ module Devise
11
11
 
12
12
  def access_token(remote_ip = nil)
13
13
  current_sign_in_at = self.respond_to?(:timedout?) && Time.now.utc
14
- current_sign_in_ip = self.respond_to?(:current_sign_in_ip) && remote_ip
14
+ current_sign_in_ip = self.token_ip_verifier && remote_ip
15
15
 
16
16
  Base64.strict_encode64(JWT.encode({ id: id, current_sign_in_at: current_sign_in_at, current_sign_in_ip: current_sign_in_ip }, Devise.secret_key, 'HS256'))
17
17
  end
18
+
19
+ def token_ip_verifier
20
+ self.class.token_ip_verifier
21
+ end
22
+
23
+ protected
24
+
25
+ module ClassMethods
26
+ Devise::Models.config(self, :token_ip_verifier)
27
+ end
18
28
  end
19
29
  end
20
30
  end
@@ -0,0 +1,9 @@
1
+ require 'devise_token_authenticatable/controllers/token_authenticatable'
2
+
3
+ module DeviseTokenAuthenticatable
4
+ class Engine < ::Rails::Engine
5
+ ActiveSupport.on_load(:action_controller) do
6
+ include Devise::Controllers::TokenAuthenticatable
7
+ end
8
+ end
9
+ end
@@ -13,7 +13,7 @@ module Devise
13
13
 
14
14
  return fail(:timeout) if resource.respond_to?(:timedout?) && !env['devise.skip_timeout'] && resource.timedout?(current_sign_in_at)
15
15
 
16
- if validate(resource) { !resource.respond_to?(:current_sign_in_ip) || request.remote_ip == current_sign_in_ip }
16
+ if validate(resource) { !resource.token_ip_verifier || request.remote_ip == current_sign_in_ip }
17
17
  success!(resource)
18
18
  end
19
19
 
@@ -1,3 +1,3 @@
1
1
  module DeviseTokenAuthenticatable
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -0,0 +1,56 @@
1
+ require 'rails/generators/base'
2
+
3
+ # Je me suis servi de :
4
+
5
+ # - la documentation des generators
6
+ # https://guides.rubyonrails.org/generators.html
7
+
8
+ # - Depuis Rails 3.0, la gem Thor permet de manipuler facilement des fichiers, dont create_file et inject_into_file
9
+ # https://github.com/erikhuda/thor
10
+ # https://www.rubydoc.info/github/wycats/thor/master/Thor/Actions/InjectIntoFile
11
+ module DeviseTokenAuthenticatable
12
+ class InitializerGenerator < Rails::Generators::Base
13
+ desc "This generator initializes devise_token_authenticatable's gem configs"
14
+
15
+ ## Déclaration des constantes
16
+
17
+ SESSIONS_COMMENT_LINE = "# SessionsController generated by devise_token_authenticatable\n\n"
18
+ REGISTRATIONS_COMMENT_LINE = "# RegistrationsController generated by devise_token_authenticatable\n\n"
19
+
20
+ ## Initialisation SessionsController
21
+
22
+ def create_sessions_controller
23
+ # Possible de le faire en une seule ligne avec un create_file(file, content)
24
+ # J'ai utilisé deux lignes pour la PR pour utiliser les fonctions de Thor
25
+ create_file 'app/controllers/users/sessions_controller.rb', InitializerGenerator::SESSIONS_COMMENT_LINE
26
+ inject_into_file "app/controllers/users/sessions_controller.rb", write_sessions_controller, after: InitializerGenerator::SESSIONS_COMMENT_LINE
27
+ end
28
+
29
+ def write_sessions_controller
30
+ <<RUBY
31
+ class Users::SessionsController < Devise::SessionsController
32
+ def create
33
+ super do
34
+ set_user_access_token!
35
+ end
36
+ end
37
+ end
38
+ RUBY
39
+ end
40
+
41
+ ## Initialisation RegistrationsController
42
+
43
+ def create_registrations_controller
44
+ create_file 'app/controllers/users/registrations_controller.rb', InitializerGenerator::REGISTRATIONS_COMMENT_LINE
45
+ inject_into_file "app/controllers/users/registrations_controller.rb", write_registrations_controller, after: InitializerGenerator::REGISTRATIONS_COMMENT_LINE
46
+ end
47
+
48
+ def write_registrations_controller
49
+ <<RUBY
50
+ class Users::RegistrationsController < Devise::RegistrationsController
51
+ prepend_before_action :set_user_access_token!, only: %i[edit update destroy]
52
+ end
53
+ RUBY
54
+ end
55
+ end
56
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_token_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan PHILIPPE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-16 00:00:00.000000000 Z
11
+ date: 2018-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.4'
19
+ version: '4.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 4.4.3
22
+ version: 4.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '4.4'
29
+ version: '4.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 4.4.3
32
+ version: 4.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: jwt
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -90,8 +90,10 @@ files:
90
90
  - lib/devise_token_authenticatable.rb
91
91
  - lib/devise_token_authenticatable/controllers/token_authenticatable.rb
92
92
  - lib/devise_token_authenticatable/models/token_authenticatable.rb
93
+ - lib/devise_token_authenticatable/rails.rb
93
94
  - lib/devise_token_authenticatable/strategies/token_authenticatable.rb
94
95
  - lib/devise_token_authenticatable/version.rb
96
+ - lib/generators/devise_token_authenticatable/initializer_generator.rb
95
97
  homepage: ''
96
98
  licenses:
97
99
  - MIT