Skip to content

Commit 919031b

Browse files
committed
Add devise-jwt gem and configure JWT authentication
1 parent 3cdf977 commit 919031b

File tree

5 files changed

+37
-2
lines changed

5 files changed

+37
-2
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ gem "bootsnap", require: false
4444

4545
gem "devise"
4646

47+
gem 'devise-jwt'
48+
4749
# Use Sass to process CSS
4850
# gem "sassc-rails"
4951

Gemfile.lock

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,19 @@ GEM
9494
railties (>= 4.1.0)
9595
responders
9696
warden (~> 1.2.3)
97+
devise-jwt (0.11.0)
98+
devise (~> 4.0)
99+
warden-jwt_auth (~> 0.8)
97100
diff-lcs (1.5.0)
101+
dry-auto_inject (1.0.1)
102+
dry-core (~> 1.0)
103+
zeitwerk (~> 2.6)
104+
dry-configurable (1.1.0)
105+
dry-core (~> 1.0, < 2)
106+
zeitwerk (~> 2.6)
107+
dry-core (1.0.1)
108+
concurrent-ruby (~> 1.0)
109+
zeitwerk (~> 2.6)
98110
erubi (1.12.0)
99111
globalid (1.2.1)
100112
activesupport (>= 6.1)
@@ -110,6 +122,7 @@ GEM
110122
jbuilder (2.11.5)
111123
actionview (>= 5.0.0)
112124
activesupport (>= 5.0.0)
125+
jwt (2.7.1)
113126
loofah (2.20.0)
114127
crass (~> 1.0.2)
115128
nokogiri (>= 1.5.9)
@@ -229,6 +242,11 @@ GEM
229242
concurrent-ruby (~> 1.0)
230243
warden (1.2.9)
231244
rack (>= 2.0.9)
245+
warden-jwt_auth (0.8.0)
246+
dry-auto_inject (>= 0.8, < 2)
247+
dry-configurable (>= 0.13, < 2)
248+
jwt (~> 2.1)
249+
warden (~> 1.2)
232250
web-console (4.2.0)
233251
actionview (>= 6.0.0)
234252
activemodel (>= 6.0.0)
@@ -254,6 +272,7 @@ DEPENDENCIES
254272
capybara
255273
debug
256274
devise
275+
devise-jwt
257276
importmap-rails
258277
jbuilder
259278
puma (~> 5.0)

app/models/user.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,11 @@ class User < ApplicationRecord
22
# Include default devise modules. Others available are:
33
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
44
devise :database_authenticatable, :registerable,
5-
:recoverable, :rememberable, :validatable
5+
:recoverable, :rememberable, :validatable,
6+
:jwt_authenticatable, jwt_revocation_strategy: Devise::JWT::RevocationStrategies::Null
7+
8+
def generate_jwt
9+
payload = { user_id: id, exp: 1.day.from_now.to_i }
10+
JWT::Encoder.encode(payload, Rails.application.credentials.devise_jwt_secret_key)
11+
end
612
end

config/credentials.yml.enc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
+82DHvhl+EoVC282T7Bm1c6pjG+zPDk33genA0A2taWvpooSCVUgK8HQhk+t5/DiDdhiPRQxHPq6obXFum9uTmOSOUf47K+hBs4oKFISJqbRWC3GayB3FjYJy/xaeRV3JgCClr9D8Dr9ZSg8DR0WtcPxQpNFlEDwskaKVRigVQykmtG+FSmRcd6cw7oc5P/lS3Umeen97P0rU3ykEclW+SI9iZMT9F9H5KIFFvawZe4z08DdPbEnzsRLy5JjnoraiNW0pBs1+pe+Nl07nbxtewaWcek7HBEKh3c/WTRx2ZmobH6htdmu5Mic3iDuTG8dtGifZrjPO64aHiy51pZ2ctQ6H5Eos28Oh0za7oQd0lLhuQx0QQPAOP6jFfskSc+oplosKrXzZ5YNW9JlZ7ekUDwr6KK0E1elLmVD--DXQ1OcBZYOyZZ5md--zFU0gwGcEs4cNMz9k9vLmw==
1+
bnMbcO9jI+ZVwANkEbRXicq4F3Cz65ANfWLuPoCiCdkq0aRrgJY9ytGg2F+eFBbFBcSIUXiUsapE+1O8FO8SG3uk/6OPT5PYpvd4oZrnVUG71bkQY8+gz3VWhHm6L9U6CdQCViktRGkdIbTyX5vQWEjZQXD1gzeQpYrWgOFJDux8DlqQCvWSTzwmIdSC2i5tZjZ0ViidDZ6ac1LOvQniFjtXlV2TXwsPIUbwVEXVoVajKRu7IS3qb77kXPfxuvS8wYh/xg6Z75w6hQ/3OxgTeYDKeqVfvAxDULmMAqx32/Rug14hb5PXp/MODk0Su/ddz/GCYRtIZrDwmwTnyHppCdPMGZhpVRFfInCjlRaHSZw0BreIwUU1GHDr9hiLq4sMm7MhDgWp1CW/28bg2kfETiq97ln2R0ssNlt7j4r/KnRlq4hzwfJ3ZPxVCRC2Fx4kx3vMotZ/0QVBUqJH/dA=--gM9qn9Lvnfpo8C0L--k5jFAP7f8FpGe/K0HRa0wg==

config/initializers/devise.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616
# by default. You can change it below and use your own secret key.
1717
# config.secret_key = '8d60f8b304bf1c82db63b6edf2e8b1a69568f1c55699e471df807605bbb8c9cfdf00836cccd21e2afb8d6625498459af3642129e3e872b9c95d9cbacaa993b1c'
1818

19+
config.jwt do |jwt|
20+
jwt.secret = Rails.application.credentials.devise_jwt_secret_key!
21+
jwt.dispatch_requests = [
22+
['POST', %r{^/api/login$}] # Thay đổi đường dẫn và phương thức HTTP tương ứng với API của bạn
23+
]
24+
jwt.expiration_time = 1.day.to_i
25+
end
26+
1927
# ==> Controller configuration
2028
# Configure the parent class to the devise controllers.
2129
# config.parent_controller = 'DeviseController'

0 commit comments

Comments
 (0)