devise-jwt 0.10.0 → 0.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b5a307382874853dba1abc67c451c9dd01e81a1b2dd84c94db6a10af7f4cc44
4
- data.tar.gz: b3f6ec7a63b8f481038f2aeb72cb872d451dfc679537aa29b1d85aaa66c6aaab
3
+ metadata.gz: 3d189f85171b96941564ca209393e88cddd486987f5dbb09c94a86bda15e2fb6
4
+ data.tar.gz: 3e513907f6c745dce964a48b757be8de97e7e07a0db2ffa83718af4622a77411
5
5
  SHA512:
6
- metadata.gz: e95511b4462ce942934858d578589ba618117e8bfc6e3f617f7082f82627b293e706d130a242afde25ce3e8ff5da8e8d4d058c54d51ac2dfd785f5e59747e87d
7
- data.tar.gz: 713c71400296bae1493096d2f55b19bedff85cb7884502cd09a954872c72624a109887ef405cbee04ad56520ee255aab190f6b3c5032a952ecaa978223c9e06a
6
+ metadata.gz: 7786325a88c8200ef09f9ce634f31fb930904e4ab48618a394d1d0778ea2895127089f138fe78345a6d35e6048236121c1d3424e7b65ba7b12abc81a0ddf95e7
7
+ data.tar.gz: bca1e74cd44f45991f9d1389932e4d5bd0b89c193af38e6601cccbee4682796948b8cd5f090095928f26f4463e3289707a1125d2139ede90afa73dae3a6d6476
@@ -1,4 +1,4 @@
1
- name: CI
1
+ name: CI
2
2
 
3
3
  on: [push, pull_request]
4
4
 
@@ -7,15 +7,16 @@ jobs:
7
7
  runs-on: ubuntu-latest
8
8
  strategy:
9
9
  matrix:
10
- ruby-version: ['2.7', '3.0', '3.1', ruby-head]
10
+ ruby-version: ['3.2', '3.3', '3.4', ruby-head]
11
11
 
12
12
  steps:
13
- - uses: actions/checkout@v3
13
+ - uses: actions/checkout@v6
14
14
  - name: Set up Ruby ${{ matrix.ruby-version }}
15
15
  uses: ruby/setup-ruby@v1
16
16
  with:
17
17
  ruby-version: ${{ matrix.ruby-version }}
18
18
  bundler-cache: true # 'bundle install' and cache
19
- - name: Run specs
19
+ - name: Run specs
20
20
  run: |
21
+ cd spec/fixtures/rails_app && bundle && bundle exec rails db:setup && cd -
21
22
  bundle exec rspec
@@ -6,12 +6,12 @@ jobs:
6
6
  lint:
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v3
9
+ - uses: actions/checkout@v6
10
10
  - name: Set up Ruby ${{ matrix.ruby-version }}
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 2.7
13
+ ruby-version: 3.4
14
14
  bundler-cache: true # 'bundle install' and cache
15
- - name: Run specs
15
+ - name: Run specs
16
16
  run: |
17
17
  bundle exec rubocop
data/.gitignore CHANGED
@@ -6,7 +6,11 @@
6
6
  /doc/
7
7
  /pkg/
8
8
  /spec/reports/
9
+ /spec/fixtures/rails_app/db/test.sqlite3*
10
+ /spec/fixtures/rails_app/db/development.sqlite3*
11
+ /spec/fixtures/rails_app/tmp
9
12
  /tmp/
10
13
  .overcommit_gems.rb.lock
11
14
  *.log
12
15
  *sqlite3-journal
16
+ /tags
data/.rubocop.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  require: rubocop-rspec
2
2
  AllCops:
3
- TargetRubyVersion: 2.7
3
+ TargetRubyVersion: 3.0
4
4
  Exclude:
5
5
  - Gemfile
6
6
  - devise-jwt.gemspec
data/CHANGELOG.md CHANGED
@@ -1,9 +1,24 @@
1
- # Change Log
1
+ [#](#) Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
+ ## [0.13.0] - 2026-01-13
8
+ - Support devise 5.0
9
+
10
+ ## [0.12.1] - 2024-07-12
11
+ - Fix properly support for `token_header` & `issuer` config options
12
+
13
+ ## [0.12.0] - 2024-07-10
14
+ ### Added
15
+ - Add support for `token_header` config
16
+ - Add support for `issuer` config
17
+
18
+ ## [0.11.0] - 2023-05-10
19
+ ### Added
20
+ - Add support for rotation_secret
21
+
7
22
  ## [0.10.0] - 2022-09-16
8
23
  ### Added
9
24
  - Enable support for asymmetric algorithms
data/README.md CHANGED
@@ -101,7 +101,7 @@ Devise.setup do |config|
101
101
  end
102
102
  ```
103
103
 
104
- > **Important:** You are encouraged to use a secret different than your application `secret_key_base`. It is quite possible that some other component of your system is already using it. If several components share the same secret key, chances that a vulnerability in one of them has a wider impact increase. In rails, generating new secrets is as easy as `bundle exec rake secret`. Also, never share your secrets pushing it to a remote repository, you are better off using an environment variable like in the example.
104
+ > **Important:** You are encouraged to use a secret different than your application `secret_key_base`. It is quite possible that some other component of your system is already using it. If several components share the same secret key, chances that a vulnerability in one of them has a wider impact increase. In rails, generating new secrets is as easy as `rails secret`. Also, never share your secrets pushing it to a remote repository, you are better off using an environment variable like in the example.
105
105
 
106
106
  Currently, HS256 algorithm is the one in use. You may configure a matching secret and algorithm name to use a different one (see [ruby-jwt](https://github.com/jwt/ruby-jwt#algorithms-and-usage) to see which are supported):
107
107
 
@@ -202,10 +202,11 @@ This is so because of the following default Devise workflow:
202
202
  in the session without requiring a strategy (`:jwt_authenticatable`
203
203
  in our case).
204
204
 
205
- So, if you want to avoid this caveat you have three options:
205
+ So, if you want to avoid this caveat you have five options:
206
206
 
207
207
  - Disable the session. If you are developing an API, you probably don't need
208
208
  it. In order to disable it, change `config/initializers/session_store.rb` to:
209
+
209
210
  ```ruby
210
211
  Rails.application.config.session_store :disabled
211
212
  ```
@@ -213,18 +214,41 @@ So, if you want to avoid this caveat you have three options:
213
214
  have the session disabled.
214
215
  - If you still need the session for any other purpose, disable
215
216
  `:database_authenticatable` user storage. In `config/initializers/devise.rb`:
217
+
216
218
  ```ruby
217
219
  config.skip_session_storage = [:http_auth, :params_auth]
218
220
  ```
219
221
  - If you are using Devise for another model (e.g. `AdminUser`) and doesn't want
220
222
  to disable session storage for Devise entirely, you can disable it on a
221
223
  per-model basis:
224
+
222
225
  ```ruby
223
226
  class User < ApplicationRecord
224
227
  devise :database_authenticatable #, your other enabled modules...
225
228
  self.skip_session_storage = [:http_auth, :params_auth]
226
229
  end
227
230
  ```
231
+ - If you need the session for some of the controllers, you are able to disable it at
232
+ the controller level for those controllers which don't need it:
233
+
234
+ ```ruby
235
+ class AdminsController < ApplicationController
236
+ before_action :drop_session_cookie
237
+
238
+ private
239
+
240
+ def drop_session_cookie
241
+ request.session_options[:skip] = true
242
+ end
243
+ ```
244
+ - As the last option you can tell Devise to not store the user in the Warden session
245
+ if you override default Devise `SessionsController` with your own one, and pass
246
+ `store: false` attribute to the `sign_in`, `sign_in_and_redirect`, `bypass_sign_in`
247
+ methods:
248
+
249
+ ```ruby
250
+ sign_in user, store: false
251
+ ```
228
252
 
229
253
  ### Revocation strategies
230
254
 
@@ -481,6 +505,10 @@ end
481
505
 
482
506
  Secret key is used to sign generated JWT tokens. You must set it.
483
507
 
508
+ #### rotation_secret
509
+
510
+ Allow rotating secrets. Set a new value to `secret` and copy the old secret to `rotation_secret`.
511
+
484
512
  #### expiration_time
485
513
 
486
514
  Number of seconds while a JWT is valid after its generation. After that, it won't be valid anymore, even if it hasn't been revoked.
@@ -543,6 +571,19 @@ jwt.request_formats = {
543
571
 
544
572
  By default, only requests without format are processed.
545
573
 
574
+ #### token_header
575
+
576
+ Request/response header which will transmit the JWT token.
577
+
578
+ Defaults to 'Authorization'
579
+
580
+ #### issuer
581
+
582
+ Expected issuer claim. If present, it will be checked against the incoming
583
+ token issuer claim and authorization will be skipped if they don't match.
584
+
585
+ Defaults to nil.
586
+
546
587
  #### aud_header
547
588
 
548
589
  Request header which content will be stored to the `aud` claim in the payload.
@@ -559,6 +600,25 @@ like an OAuth workflow with client id and client secret.
559
600
 
560
601
  Defaults to `JWT_AUD`.
561
602
 
603
+ #### token_header
604
+
605
+ Request header containing the token in the format of `Bearer #{token}`.
606
+
607
+ Defaults to `Authorization`.
608
+
609
+ #### issuer
610
+
611
+ The [issuer claim in the token](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1).
612
+
613
+ If present, it will be checked against the incoming token issuer claim and
614
+ authorization will be skipped if they don't match.
615
+
616
+ Defaults to `nil`.
617
+
618
+ ```ruby
619
+ jwt.issuer = 'http://myapp.com'
620
+ ```
621
+
562
622
  ## Development
563
623
 
564
624
  There are docker and docker-compose files configured to create a development environment for this gem. So, if you use Docker you only need to run:
data/devise-jwt.gemspec CHANGED
@@ -21,20 +21,20 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency 'devise', '~> 4.0'
25
- spec.add_dependency 'warden-jwt_auth', '~> 0.6'
24
+ spec.add_dependency 'devise', '>= 4.0.0', '< 6.0.0'
25
+ spec.add_dependency 'warden-jwt_auth', '~> 0.10'
26
26
 
27
27
  spec.add_development_dependency "bundler", "> 1"
28
28
  spec.add_development_dependency "rake", "~> 13.0"
29
29
  spec.add_development_dependency "rspec"
30
30
  # Needed to test the rails fixture application
31
- spec.add_development_dependency 'rails', '~> 6.0'
32
- spec.add_development_dependency 'sqlite3', '~> 1.3'
33
- spec.add_development_dependency 'rspec-rails', '~> 4.0'
31
+ spec.add_development_dependency 'rails'
32
+ spec.add_development_dependency 'sqlite3'
33
+ spec.add_development_dependency 'rspec-rails'
34
34
  # Cops
35
- spec.add_development_dependency 'rubocop', '~> 0.87'
36
- spec.add_development_dependency 'rubocop-rspec', '~> 1.42'
35
+ spec.add_development_dependency 'rubocop'
36
+ spec.add_development_dependency 'rubocop-rspec'
37
37
  # Test reporting
38
- spec.add_development_dependency 'simplecov', '0.17'
39
- spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
38
+ spec.add_development_dependency 'simplecov'
39
+ spec.add_development_dependency 'codeclimate-test-reporter'
40
40
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Devise
4
4
  module JWT
5
- VERSION = '0.10.0'
5
+ VERSION = '0.13.0'
6
6
  end
7
7
  end
data/lib/devise/jwt.rb CHANGED
@@ -36,6 +36,10 @@ module Devise
36
36
  default: Warden::JWTAuth.config.secret,
37
37
  constructor: ->(value) { forward_to_warden(:secret, value) })
38
38
 
39
+ setting(:rotation_secret,
40
+ default: Warden::JWTAuth.config.rotation_secret,
41
+ constructor: ->(value) { forward_to_warden(:rotation_secret, value) })
42
+
39
43
  setting(:decoding_secret,
40
44
  constructor: ->(value) { forward_to_warden(:decoding_secret, value) })
41
45
 
@@ -54,6 +58,14 @@ module Devise
54
58
  default: Warden::JWTAuth.config.revocation_requests,
55
59
  constructor: ->(value) { forward_to_warden(:revocation_requests, value) })
56
60
 
61
+ setting(:token_header,
62
+ default: Warden::JWTAuth.config.token_header,
63
+ constructor: ->(value) { forward_to_warden(:token_header, value) })
64
+
65
+ setting(:issuer,
66
+ default: Warden::JWTAuth.config.issuer,
67
+ constructor: ->(value) { forward_to_warden(:issuer, value) })
68
+
57
69
  setting(:aud_header,
58
70
  default: Warden::JWTAuth.config.aud_header,
59
71
  constructor: ->(value) { forward_to_warden(:aud_header, value) })
metadata CHANGED
@@ -1,43 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc Busqué
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-16 00:00:00.000000000 Z
11
+ date: 2026-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '4.0'
22
+ version: 6.0.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 4.0.0
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '4.0'
32
+ version: 6.0.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: warden-jwt_auth
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '0.6'
39
+ version: '0.10'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '0.6'
46
+ version: '0.10'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: bundler
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -84,100 +90,100 @@ dependencies:
84
90
  name: rails
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - "~>"
93
+ - - ">="
88
94
  - !ruby/object:Gem::Version
89
- version: '6.0'
95
+ version: '0'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - "~>"
100
+ - - ">="
95
101
  - !ruby/object:Gem::Version
96
- version: '6.0'
102
+ version: '0'
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: sqlite3
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - "~>"
107
+ - - ">="
102
108
  - !ruby/object:Gem::Version
103
- version: '1.3'
109
+ version: '0'
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - "~>"
114
+ - - ">="
109
115
  - !ruby/object:Gem::Version
110
- version: '1.3'
116
+ version: '0'
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: rspec-rails
113
119
  requirement: !ruby/object:Gem::Requirement
114
120
  requirements:
115
- - - "~>"
121
+ - - ">="
116
122
  - !ruby/object:Gem::Version
117
- version: '4.0'
123
+ version: '0'
118
124
  type: :development
119
125
  prerelease: false
120
126
  version_requirements: !ruby/object:Gem::Requirement
121
127
  requirements:
122
- - - "~>"
128
+ - - ">="
123
129
  - !ruby/object:Gem::Version
124
- version: '4.0'
130
+ version: '0'
125
131
  - !ruby/object:Gem::Dependency
126
132
  name: rubocop
127
133
  requirement: !ruby/object:Gem::Requirement
128
134
  requirements:
129
- - - "~>"
135
+ - - ">="
130
136
  - !ruby/object:Gem::Version
131
- version: '0.87'
137
+ version: '0'
132
138
  type: :development
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
- - - "~>"
142
+ - - ">="
137
143
  - !ruby/object:Gem::Version
138
- version: '0.87'
144
+ version: '0'
139
145
  - !ruby/object:Gem::Dependency
140
146
  name: rubocop-rspec
141
147
  requirement: !ruby/object:Gem::Requirement
142
148
  requirements:
143
- - - "~>"
149
+ - - ">="
144
150
  - !ruby/object:Gem::Version
145
- version: '1.42'
151
+ version: '0'
146
152
  type: :development
147
153
  prerelease: false
148
154
  version_requirements: !ruby/object:Gem::Requirement
149
155
  requirements:
150
- - - "~>"
156
+ - - ">="
151
157
  - !ruby/object:Gem::Version
152
- version: '1.42'
158
+ version: '0'
153
159
  - !ruby/object:Gem::Dependency
154
160
  name: simplecov
155
161
  requirement: !ruby/object:Gem::Requirement
156
162
  requirements:
157
- - - '='
163
+ - - ">="
158
164
  - !ruby/object:Gem::Version
159
- version: '0.17'
165
+ version: '0'
160
166
  type: :development
161
167
  prerelease: false
162
168
  version_requirements: !ruby/object:Gem::Requirement
163
169
  requirements:
164
- - - '='
170
+ - - ">="
165
171
  - !ruby/object:Gem::Version
166
- version: '0.17'
172
+ version: '0'
167
173
  - !ruby/object:Gem::Dependency
168
174
  name: codeclimate-test-reporter
169
175
  requirement: !ruby/object:Gem::Requirement
170
176
  requirements:
171
- - - "~>"
177
+ - - ">="
172
178
  - !ruby/object:Gem::Version
173
- version: '1.0'
179
+ version: '0'
174
180
  type: :development
175
181
  prerelease: false
176
182
  version_requirements: !ruby/object:Gem::Requirement
177
183
  requirements:
178
- - - "~>"
184
+ - - ">="
179
185
  - !ruby/object:Gem::Version
180
- version: '1.0'
186
+ version: '0'
181
187
  description: JWT authentication for devise with configurable token revocation strategies
182
188
  email:
183
189
  - marc@lamarciana.com
@@ -195,7 +201,6 @@ files:
195
201
  - ".rubocop.yml"
196
202
  - CHANGELOG.md
197
203
  - CODE_OF_CONDUCT.md
198
- - Dockerfile
199
204
  - Gemfile
200
205
  - LICENSE.txt
201
206
  - README.md
@@ -203,7 +208,6 @@ files:
203
208
  - bin/console
204
209
  - bin/setup
205
210
  - devise-jwt.gemspec
206
- - docker-compose.yml
207
211
  - issue_template.md
208
212
  - lib/devise/jwt.rb
209
213
  - lib/devise/jwt/defaults_generator.rb
@@ -222,7 +226,7 @@ homepage: https://github.com/waiting-for-dev/devise-jwt
222
226
  licenses:
223
227
  - MIT
224
228
  metadata: {}
225
- post_install_message:
229
+ post_install_message:
226
230
  rdoc_options: []
227
231
  require_paths:
228
232
  - lib
@@ -237,8 +241,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
241
  - !ruby/object:Gem::Version
238
242
  version: '0'
239
243
  requirements: []
240
- rubygems_version: 3.0.3.1
241
- signing_key:
244
+ rubygems_version: 3.5.9
245
+ signing_key:
242
246
  specification_version: 4
243
247
  summary: JWT authentication for devise
244
248
  test_files: []
data/Dockerfile DELETED
@@ -1,7 +0,0 @@
1
- FROM ruby:3.0.0
2
- ENV APP_USER devise_jwt_user
3
- RUN apt-get update -qq && \
4
- apt-get install -y build-essential sqlite3 libsqlite3-dev
5
- RUN useradd -ms /bin/bash $APP_USER
6
- USER $APP_USER
7
- WORKDIR /home/$APP_USER/app
data/docker-compose.yml DELETED
@@ -1,12 +0,0 @@
1
- version: '2'
2
- services:
3
- app:
4
- build: .
5
- image: devise_jwt
6
- command: bash -c "bundle && tail -f Gemfile"
7
- volumes:
8
- - .:/home/devise_jwt_user/app
9
- tty: true
10
- stdin_open: true
11
- tmpfs:
12
- - /tmp