menu

Rails - Authentification (logout)


Ini adalah artikel pertama pada tahun 2017, sudah lama vakum karena liburan akhirnya bisa kembali ngeblog.

Pada tutorial sebelumnya kita sudah membuat sebuah function login pada project Ruby on Rails, sekarang kita akan melanjutkan tutorialnya dengan menambahkan function logout.

Pertama, edit file routes.rb pada path config/ dengan menambahkan route logout sehingga akan tampak seperti ini,
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  # root 'application#hello'
  get 'users' => 'users#index'

  get '' => 'home#index'

  get 'signup' => 'users#_signup'
  post 'signup' => 'users#_addUser'

  get 'login' => 'auth#index'
  post 'login' => 'auth#create'
  delete 'logout' => 'auth#logout'

  get 'edit/:id' => 'users#_show', as: :user
  post 'edit/:id' => 'users#_edit'

  delete 'delete/:id' => 'users#_delete'
end

Selanjutnya, tambahkan function logout dengan mengedit controller auth_controller.rb pada path app/controllers/ sehingga akan tampak seperti ini,
class AuthController < ApplicationController
 def index
 end

 def create
  @user = User.find_by_email(params[:session][:email])
  if @user && @user.authenticate(params[:session][:password])
   session[:user_id] = @user.id
   redirect_to '/'
  else
   redirect_to 'login'
  end
 end

 def logout
  session[:user_id] = nil
  redirect_to '/'
 end
end

Kemudian, tambahkan link untuk logout yang akan kita tempatkan pada file application.html.erb pada path app/layouts/ sehingga codenya akan tampak seperti ini,
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Page</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
 <div class="header">
  <div class="content">
   <div class="left-float">
    <a href="/" class="button-header">Home</a>
    <div class="dropdown">
     <a class="button-header dropbtn" onclick="myFunction()">Table</a>
     <div id="myDropdown" class="dropdown-content">
      <a href="/users">User</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
     </div>
    </div> 
   </div>
   <div class="right-float">
    <% if current_user %>
     <%= link_to 'Logout', logout_path, method: :delete, data: { confirm: 'Are you sure to logout?' } %>
    <% else %>
     <a href="/login" class="button-header">Login</a>
    <% end %>
   </div>
  </div>
 </div>
 <div class="isi">
     <%= yield %>
    </div>
    <div class="footer">
  COPYRIGHT © 2016 CODEDOCT.COM ALL RIGHTS RESERVED.
 </div>
  </body>
</html>

Terakhir, buat tanda sedang login atau tidak dengan mengedit file index.html.erb pada path app/views/home/ menjadi seperti ini,
<%= provide(:title, "Home") %>
<h1 class="text-center">Welcome to my ruby website <% if current_user %><%=current_user.email%><% else %>Guest<% end %></h1>
<br>
<p>
 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
 quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
 consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
 cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
 proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>

Sehingga tampilan saat sedang tidak login akan tampak seperti ini,


Sedangkan tampilan saat sedang login dan akan logout akan tampak sepreti ini,



===DONE!===