Friday, July 15, 2016

Rails authentication using Devise

Devise


devise gem github url: https://github.com/plataformatec/devise

[01] add devise gem
       gem 'devise'

[02] install gem 
       $bundle install

[03] run generator
       $rails generate devise:install

[04] generate model
       $rails generate devise User
       $rails db:migrate


[05] edit config/environments/development.rb add line
       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

[06] edit app/views/layouts/application.html.erb add lines
       <div id=user_nav>
          <% if user_signed_in? %>
            <p> Logged in as <strong><%= current_user.email %></strong>. </p>
            <%= link_to "Edit Profile", edit_user_registration_path %> |
            <%= link_to "Logout", destroy_user_session_path, method: :delete %>
          <% else %>
            <%= link_to "Sign up", new_user_registration_path %> |
            <%= link_to "Login", new_user_session_path %>
          <% end %>             
        </div>
        <% flash.each do |name, msg| %>
          <%= content_tag :div, msg, id: "flash_#{name}" %>
      <% end %>


[07] copy Devise views
       $rails g devise:views


Customize Sign_in to Login

[08] edit config/locales/devise.en.yml edit lines
       signed_in: "Logged in successfully."
       signed_out: "Logged out successfully." 

       already_signed_out: "Logged out successfully."
       
[09] edit views/devise/sessions/new.html.erb

[10] edit routes.rb
       devise_for :users, path_names: {sign_in: "login", sign_out: "logout"} 

Login as username

[11] add username column in users table
       $rails g migration add_username_to_users username 
       $rails db:migrate

[12] edit views/devise/sessions/new.html.erb
       <div class="field">
         <%= f.label :username %><br />
         <%= f.text_field :username, autofocus: true %>
       </div>


[13] edit config/initilizers/devise.rb 
       config.authentication_keys = [:username]
       config.case_insensitive_keys = [:username]
       config.strip_whitespace_keys = [:username]

 [14] edit user.rb add line
       validates_presence_of :username

[15] edit application_controller.rb add lines
       before_action :configure_permitted_parameters, if: :devise_controller?
       
       def configure_permitted_parameters
         devise_parameter_sanitizer.permit(:sign_up) do |user_params|
           user_params.permit({ roles: [] }, :email, :username, :password, :password_confirmation)
         end
       end
 

restrict article content

[16] edit articles_controller.rb add line
       before_action :authenticate_user!, except: [:index, :show]

      *** before_action is a new syntax for before_filter

 

 

Video Resources


No comments:

Post a Comment