In this tutorial, we will be dealing with Rails authentication with Devise.
If you don’t want to use Devise for authentication, you may refer to the article create basic authentication in Ruby on Rails instead.
Devise has been around for some time now and have been used and reviewed thousands of times and still receives security updates to date.
Not only that, it is also composed of other features such as reset password, email integration, and many more that can be a pain when creating your own authentication system.
Step 1: Initialize a Rails application
You can initialize a Rails application by running the following commands in the terminal.
1
2
$ rails new devise-app
$ cd devise-app
Step 2: Install the Devise gem
In your Gemfile
add the following:
1
gem 'devise'
And run the following in the terminal.
1
2
$ bundle install
$ rails g devise:install
This will install and initialize the Devise gem in our Rails application.
Step 3: Create your model for authentication
In this example, we would be using User
as our model for authentication.
Run the following commands in the terminal.
1
2
$ rails g devise user
$ rails db:migrate
This will create a migration file for our User
model then migrate it to complete.
Step 4: Add messages and navigation link to views
In your app/views/layouts/application.html.erb
, add the following:
1
2
3
4
5
6
7
8
9
10
<% if user_signed_in? %>
Logged in as <strong><%= current_user.email %></strong>.
<%= link_to 'Edit Profile', edit_user_registration_path %> |
<%= link_to 'Sign out', destroy_user_session_path, :method => :delete %>
<% else %>
<%= link_to 'Sign up', new_user_registration_path %> |
<%= link_to 'Sign in', new_user_session_path %>
<% end %>
<%= notice if notice.present? %>
<%= alert if alert.present? %>
This will show the current signed in user, a link to edit profile, a link to sign-out if there is a current user and will show a sign-up link and sign-in link instead otherwise.
The notice
and alert
are used to notify the user for the actions that have been made.
Step 5: Register a user
Now that we have a model, we can now register a new User. The Devise gem already created everything we need such as routes, models, etc. for our authentication to work.
Run your Rails server by running the following in the terminal.
1
$ rails s
Navigate to http://localhost:3000/users/sign_up in your browser and you should see a form.
Fill up the form and click Sign up.
It is up to you now to create your own views and to see all available routes generated by Devise you may run the following command in the terminal.
1
$ rake routes
That’s it, we have now created a Rails authentication with Devise.