1.はじめに
ポートフォリオとしてアプリをみていただく際に新規登録を行っていただくのは手間になると考えゲストログイン機能を実装しました。
2.実装
1.ゲストログイン用のルーティングを追加
routes.rb
devise_scope :user do
post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in'
end
2.コントローラーの編集
sessions_controller.rb
がない場合は、以下コマンドで作成してください。
rails g devise:controllers users
controllers/users/sessions_controller.rb
def guest_sign_in
user = User.guest
sign_in user
redirect_to posts_path
flash[:notice] = "ゲストユーザとしてログインしました。"
end
3.モデルの編集
app/models/user.rb
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
4.ゲストログインボタンの追加
ボタンを配置したい箇所に以下記述
<%= link_to users_guest_sign_in_path, method: :post do %>
<h2 class="btn btn-success ml-2">ゲストログイン</h2>
<% end %>
5.ユーザー情報を編集できないようにする
編集画面に転移した際に、ユーザー詳細画面にリダイレクトするように修正
app/controllers/users_controller.rb
before_action :check_guest, only: :edit
def check_guest
@user = User.find(params[:id])
if @user.email == 'guest@example.com'
redirect_to user_path(@user.id)
flash[:notice] = "ゲストユーザーは編集できません。"
end
end