ゲストログインは作っておいた方が良い!
ゲストログイン押したら、ログインできちゃう便利機能です。
就職、転職活動でポートフォリオを外部の方に見せる場合には、作っておいた方が良いらしいです。
ゲストユーザーを作成せず、これでログインしてくださいとemail,passwordを提示したところで、
少し面倒なので見てもらえない可能性があります。
すぐ実装できるので、ゲストログインは作っておくべきだと思います!!!!
(他の人のポートフォリオ触ってみてもそうですが、
ゲストログインがないと、やっぱりすごく面倒に感じます。)
とても参考にした記事
気をつけないと、すぐ壊れる!!
今回ゲストログイン機能を実装しました。実装自体はうまくいったのですが、、 気をつけないとゲストログイン機能は簡単に壊れていきます。落とし穴としては今のところ以下2点だと認識しています。
①ゲストログインは、退会(削除)ができないようにする!
②ユーザー情報の編集もできないようにする!
私の場合、新規登録時に入力させる情報は以下の通りになっています。
ルーティングをかく
Rails.application.routes.draw do
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
devise_for :users, controllers: {
registrations: 'users/registrations',
sessions: 'users/sessions',
}
#ここ追記しています!!!!!
devise_scope :user do
post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in'
end
namespace :departments do
resources :searches, only: :index
end
省略
[devise_scope]は、deviseに新しくルーティングを追加したい場合に使います。(これを使わないとエラーが発生します。)
devise_scope :users do
get 'ルーティング情報', to: 'users/registrations#アクション'
end
コントローラー記述
def guest_sign_in
user = User.guest
sign_in user
redirect_to posts_path, notice: 'ゲストユーザーとしてログインしました。'
end
モデルファイル記述
def self.guest
find_or_create_by!(name: 'ゲストユーザー',
email: 'guestda@example.com',
join_year: '新入社員',
department_id: 1,
is_valid: true) do |user|
user.password = SecureRandom.urlsafe_base64
end
end
ゲストログインボタン
<li class="nav-item">
<%= link_to "ゲストログイン", users_guest_sign_in_path,class:"btn btn-light fas fa-seedling",method: :post %>
</li>
ひとまず終わり!
ここまででゲストログインはできなくなったかと思います。あとは、ゲストログインを削除、編集できないようにします。
退会させないようにする
ルーティング
devise_for :usersになってる場合は、書き換えてください。 devise_for :users, controllers: {
registrations: 'users/registrations'
}
削除しようとしたら、トップ画面へリダイレクト
私は論理削除にしています。
def destroy_confirm
@user = current_user
end
def destroy_user
@user = current_user
if @user.email == 'guestda@example.com'
reset_session
redirect_to :root
else
@user.update(is_valid: false)
reset_session
redirect_to :root
end
end
もしゲストユーザーが退会処理をしようとしたら、
ログアウトさせトップページにレダイレクトさせます。
編集させないようにする
ユーザー情報編集されると、
私の場合、「部署」「クラス(新入社員)」とか変更されると、
ゲストログインが壊れました。
なので、ゲストユーザーの場合には、
編集ページが表示されないようにしました。
<% if @user.email == 'guestda@example.com'%>
<p>ゲストユーザーはユーザー情報の編集ができません。</p>
<% else %>