The project is in a healthy, maintained state
Generates JWT auth concerns, controllers, and user models for Rails APIs
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

>= 6.0, < 9.0
 Project Readme

Rails JWT Auth Generators

Gem Version

Rails JWT Auth Generators is a Ruby gem that provides Rails generators to quickly scaffold JWT-based authentication boilerplate for Rails APIs. It includes concerns, controllers, and user models to streamline the process of setting up authentication in your Rails application.

Features

  • Generates a JsonWebToken concern for encoding and decoding JWTs.
  • Creates an AuthenticationController for handling login requests.
  • Scaffolds a UsersController for managing user resources.
  • Generates a User model with secure password handling.
  • Compatible with Rails 6.0 and above.

Installation

Add this line to your application's Gemfile:

gem 'rails_jwt_auth_generators'

And then execute:
bundle install

Or install it yourself as:
gem install rails_jwt_auth_generators

Usage

To generate the JWT authentication boilerplate, run the following command:

rails generate auth:jwt

This will create the following files in your Rails application:

  • app/controllers/concerns/json_web_token.rb
  • app/controllers/authentication_controller.rb
  • app/controllers/users_controller.rb
  • app/models/user.rb

Example Workflow

  1. Setup User Model: Ensure your database has a users table with the necessary fields (username, email, password_digest).

  2. Authentication: Use the AuthenticationController to handle login requests. It will return a JWT token upon successful authentication.

  3. Authorization: Use the JsonWebToken concern to decode and verify tokens in your application.

  4. User Management: Use the UsersController to manage user resources.

Generated Files

JsonWebToken Concern

Handles JWT encoding and decoding.

module JsonWebToken
  SECRET_KEY = Rails.application.secret_key_base

  def jwt_encode(payload, exp = 7.days.from_now)
    payload[:exp] = exp.to_i
    JWT.encode(payload, SECRET_KEY)
  end

  def jwt_decode(token)
    decoded = JWT.decode(token, SECRET_KEY)[0]
    HashWithIndifferentAccess.new(decoded)
  end
end

AuthenticationController

Handles user login and token generation.

class AuthenticationController < ApplicationController
  def login
    @user = User.find_by_email(params[:email])
    if @user&.authenticate(params[:password])
      token = jwt_encode(user_id: @user.id)
      render json: { token: token }, status: :ok
    else
      render json: { error: 'unauthorized' }, status: :unauthorized
    end
  end
end

UsersController

Manages user resources.

class UsersController < ApplicationController
  def create
    @user = User.new(user_params)
    if @user.save
      render json: @user, status: :created
    else
      render json: { errors: @user.errors.full_messages }, status: :unprocessable_entity
    end
  end
end

User Model

Defines the user with secure password handling.

class User < ApplicationRecord
  has_secure_password
  validates :email, :username, presence: true
end

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run:

bundle exec rake install

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/Zeyad-Hassan-1/rails_jwt_auth_generators. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the RailsJwtAuthGenerators project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the code of conduct.


Similar code found with 2 license types