【Ruby on rails6】Deviseでゲストログイン機能を実装する

【Ruby on rails6】Deviseでゲストログイン機能を実装する

2023年1月21日

今回はdeviseを使用して、ゲストログイン機能を作成していこうと思います。

1.ルーティングの追加

ゲストログイン用のパスを追加します。

devise_scope :user do
  post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in'
end

2.コントローラの編集

users/deviseのセッションコントローラにゲストログインをするための記述をしていきます。

class Users::SessionsController < Devise::SessionsController
  def guest_sign_in
    user = User.guest
    sign_in user
    redirect_to books_path, notice: 'ゲストユーザーとしてログインしました。'
  end
end

3.モデルファイルにゲストユーザの記述

def self.guest
    find_or_create_by!(email: 'guest@example.com') do |user|
      user.password = SecureRandom.urlsafe_base64
      user.password_confirmation = user.password
      user.name = "ゲストユーザー"
    end
  end

あとはゲストログインのurlをヘッダーに追加すれば完成です。

<li><%= link_to 'ゲストログイン(閲覧用)', users_guest_sign_in_path, method: :post %></li>

4.ゲストユーザーを編集できないようにする

<% if @user.email == 'guest@example.com'%>
      <p>ゲストユーザーはユーザー情報の編集ができません。</p>
    <% else %>
      <%= form_with model:@user, local:true do |f| %>
        <%= render 'layouts/errors', obj: @user %>
        <div class="form-group">
          <%= f.label :name %>
          <%= f.text_field :name, class: "form-control name" %>
        </div>
      <div class="form-group">
          <%= f.label :image %>
          <%= f.file_field :profile_image, class: "form-control-file user_image", accept: 'image/*' %>
        </div>
        <div class="form-group">
          <%= f.label :introduction %>
          <%= f.text_area :introduction, class: "form-control introduction" %>
        </div>
        <div class="form-group">
          <%= f.submit class: 'btn btn-secondary' %>
        </div>
      <% end %>
    <% end %>

ゲストユーザで編集画面に遷移した際には編集ができませんという表示をするようにしています。

まとめ

今回は簡単なゲストログイン機能を実装してみました。意外と簡単に実装できましたね。ファイルの追加する場所が少し難しかったな〜ぐらいです。それではまた別の記事でお会いしましょう!

カテゴリー

naska