How to Use Devise in Rails: Simple Authentication Setup
To use
devise in Rails, add it to your Gemfile, run bundle install, then generate Devise configuration with rails generate devise:install. Next, create a user model with rails generate devise User and run migrations to enable authentication features.Syntax
Using Devise in Rails involves these main commands and files:
gem 'devise'in Gemfile to add the library.rails generate devise:installto set up initial configuration.rails generate devise Userto create a User model with authentication.- Running
rails db:migrateto apply database changes.
Each step prepares your app to handle user sign-up, login, and logout.
bash
gem 'devise'
# Then run in terminal:
bundle install
rails generate devise:install
rails generate devise User
rails db:migrateExample
This example shows how to add Devise to a new Rails app and create a User model with authentication:
- Add
gem 'devise'to your Gemfile. - Run
bundle installto install the gem. - Run
rails generate devise:installto set up Devise. - Generate the User model with
rails generate devise User. - Run
rails db:migrateto create the users table. - Add
before_action :authenticate_user!in your controllers to require login.
ruby
# Gemfile source 'https://rubygems.org' gem 'rails', '~> 7.0' gem 'devise' # Terminal commands bundle install rails generate devise:install rails generate devise User rails db:migrate # app/controllers/application_controller.rb class ApplicationController < ActionController::Base before_action :authenticate_user! end
Output
Running bundle install...
Generating devise configuration files...
Creating migration for users table...
Migrating database...
User authentication is now enabled.
Common Pitfalls
Common mistakes when using Devise include:
- Not running
rails generate devise:installbefore generating models. - Forgetting to run
rails db:migrateafter generating the User model. - Not adding
before_action :authenticate_user!to controllers, so authentication is not enforced. - Missing to configure default URL options in
config/environments/development.rbfor mailers.
Always follow the setup steps in order and check the Devise README for environment-specific settings.
bash
## Wrong: Skipping install step rails generate devise User # This will cause errors because Devise is not configured. ## Right: rails generate devise:install rails generate devise User rails db:migrate
Quick Reference
| Command | Purpose |
|---|---|
| bundle install | Install gems including Devise |
| rails generate devise:install | Set up Devise configuration |
| rails generate devise User | Create User model with Devise modules |
| rails db:migrate | Apply database changes for users |
| before_action :authenticate_user! | Require login in controllers |
Key Takeaways
Add Devise gem and run bundle install to start.
Run devise:install generator before creating user models.
Generate User model with Devise and migrate database.
Use before_action :authenticate_user! to protect pages.
Check Devise docs for mailer and environment setup.