Skip to main content

One post tagged with "rails"

View All Tags

ยท 3 min read
Riky Hidayat

Apa itu Devise#

Devise adalah sebuah gem atau package untuk sistem autentikasi untuk Ruby on Rails yang sangat memudahkan dalam mengatur user, autentikasi, role, dsb.

Permasalahan#

Di Ruby on Rails 7, kita harus melakukan sedikit konfigurasi tambahan untuk menjalankan atau menginstall Devise gem.

Saat ini Devise gem belum memiliki dokumentasi resmi untuk konfigurasi Devise di Rails 7. Beruntungnya, disini saya memiliki contoh sumber yang sudah melakukan konfigurasi tambahan sehingga devise gem bisa berjalan dengan lancar source

Step by Step Pengerjaan#

tambahkan devise gem pada projek#

bundle add devise

install devise#

rails generate devise:install

generate model baru dengan tambahan field atau attribute role#

rails generate devise User role:integer

migrasi#

rails db:migrate

generate tampilan / views devise#

rails generate devise:views

tambah controller untuk parent devise#

app/controllers/turbo_devise_user_controller.rb

class TurboDeviseUserController < ApplicationController  class Responder < ActionController::Responder     def to_turbo_stream       controller.render(options.merge(formats: :html))           rescue ActionView::MissingTemplate => error       if get?         raise error       elsif has_errors? && default_action         render rendering_options.merge(formats: :html,              status: :unprocessable_entity)       else         redirect_to navigation_location       end     end   end    self.responder = Responder   respond_to :html, :turbo_stream end

inisialisasi parent controller ke initializers devise#

config/initializers/devise.rb

# frozen_string_literal: true
class TurboFailureApp < Devise::FailureApp  def respond    if request_format == :turbo_stream      redirect    else      super    end  end
  def skip_format?    %w(html turbo_stream */*).include? request_format.to_s  endend
#...
# ikuti step dibawah pada file initializers/devise.rbDevise.setup do |config|  ...  # Configure the parent class to the custom controller.  config.parent_controller = 'TurboDeviseUserController'  config.navigational_formats = ['*/*', :html, :turbo_stream]

  # Warden configuration  config.warden do |manager|    manager.failure_app = TurboFailureApp  end  #...

buat controller untuk pages#

rails generate controller pages home

ubah home html pada views pages#

<h1>Pages#home</h1><p>Find me in app/views/pages/home.html.erb</p>
<% if current_user %>  <p>Hi, welcome <%= current_user.email %> </p>  <p>You are a <span class="fw-bold"><%= current_user.role %></span></p>  <% if current_user.admin? %>    Thera are <%= User.count %> users in this system.  <% end %>  <p>You have successfully authenticated with your Devise account. You are now ready to interact with this app</p>  <%= link_to 'articles', articles_path %> <br/>  <%= link_to 'sign out', destroy_user_session_path, 'data-turbo-method': :delete %><% else %>  <p>You're not sign in, please sign in or sign up if you doesn't have an account!</p>  <%= link_to 'sign up', new_user_registration_path %>  <%= link_to 'sign in', new_user_session_path %><% end %>

cek routes.rb#

Rails.application.routes.draw dodevise_for :users
root 'pages#home'end

Kesimpulan#

Devise merupakan package yang sering digunakan untuk sistem autentikasi pada Ruby on Rails, namun di Rails 7 kita harus melakukan sedikit konfigurasi tambahan. Dengan mengimplementasikan konfigurasi tambahan yang sudah dituliskan diatas, maka kita akan bisa menggunakan devise sebagaimana mestinya.

Sekian, Terima kasih!