#
Apa itu DeviseDevise adalah sebuah gem atau package untuk sistem autentikasi untuk Ruby on Rails yang sangat memudahkan dalam mengatur user, autentikasi, role, dsb.
#
PermasalahanDi 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 projekbundle add devise
#
install deviserails generate devise:install
#
generate model baru dengan tambahan field atau attribute rolerails generate devise User role:integer
#
migrasirails db:migrate
#
generate tampilan / views deviserails generate devise:views
#
tambah controller untuk parent deviseapp/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 deviseconfig/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 pagesrails 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.rbRails.application.routes.draw dodevise_for :users
root 'pages#home'end
#
KesimpulanDevise 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!