This project demonstrates a Rails 7 API-only application using Devise for authentication and JWT for secure token-based login.
rails new api-test --api -d postgresql
cd api-test
Add to your Gemfile
:
gem 'devise'
gem 'devise-jwt'
Then install:
bundle install
- Install Devise:
rails generate devise:install
- Generate
User
model with Devise:
rails generate devise User
rails db:migrate
- Add JWT configuration in
config/initializers/devise.rb
:
config.jwt do |jwt|
jwt.secret = Rails.application.credentials.devise_jwt_secret_key
jwt.dispatch_requests = [
['POST', %r{^/users/sign_in$}]
]
jwt.revocation_requests = [
['DELETE', %r{^/users/sign_out$}]
]
jwt.expiration_time = 1.day.to_i
end
- Update the
User
model for JWT:
class User < ApplicationRecord
devise :database_authenticatable,
:registerable,
:recoverable,
:rememberable,
:validatable,
:jwt_authenticatable, jwt_revocation_strategy: JwtDenylist
end
rails generate migration CreateJwtDenylist
rails db:migrate
- Register users via
POST /users
- Login via
POST /users/sign_in
and get JWT tokens - Logout via
DELETE /users/sign_out
to revoke tokens
git init
git config --global user.name "Ramit"
git config --global user.email "your_email@example.com"
git add .
git commit -m "Setup Rails API app with Devise and JWT authentication"