今回は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 %>
ゲストユーザで編集画面に遷移した際には編集ができませんという表示をするようにしています。
まとめ
今回は簡単なゲストログイン機能を実装してみました。意外と簡単に実装できましたね。ファイルの追加する場所が少し難しかったな〜ぐらいです。それではまた別の記事でお会いしましょう!