Konfigurasi Devise Gem Untuk Ruby on Rails 7
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
end
end
#...
# ikuti step dibawah pada file initializers/devise.rb
Devise.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 do
devise_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!