LoginSignup
4
2

More than 1 year has passed since last update.

[Ruby on rails]ゲストログイン機能 ゲストログインは削除、編集されないようにする

Last updated at Posted at 2021-08-27

ゲストログインは作っておいた方が良い!

ゲストログイン押したら、ログインできちゃう便利機能です。
就職、転職活動でポートフォリオを外部の方に見せる場合には、作っておいた方が良いらしいです。
ゲストユーザーを作成せず、これでログインしてくださいとemail,passwordを提示したところで、
少し面倒なので見てもらえない可能性があります。
すぐ実装できるので、ゲストログインは作っておくべきだと思います!!!!
(他の人のポートフォリオ触ってみてもそうですが、
ゲストログインがないと、やっぱりすごく面倒に感じます。)

スクリーンショット 2021-08-27 11.34.10.png

とても参考にした記事

気をつけないと、すぐ壊れる!!

今回ゲストログイン機能を実装しました。実装自体はうまくいったのですが、、
気をつけないとゲストログイン機能は簡単に壊れていきます。

落とし穴としては今のところ以下2点だと認識しています。
①ゲストログインは、退会(削除)ができないようにする!
②ユーザー情報の編集もできないようにする!

私の場合、新規登録時に入力させる情報は以下の通りになっています。

スクリーンショット 2021-08-27 11.29.25.png

ルーティングをかく

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に新しくルーティングを追加したい場合に使います。(これを使わないとエラーが発生します。)
rb
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

モデルファイル記述

user.rb
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'
  }

削除しようとしたら、トップ画面へリダイレクト

私は論理削除にしています。

app/controllers/users_controller.rb
 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

もしゲストユーザーが退会処理をしようとしたら、
ログアウトさせトップページにレダイレクトさせます。

編集させないようにする

ユーザー情報編集されると、
私の場合、「部署」「クラス(新入社員)」とか変更されると、
ゲストログインが壊れました。
なので、ゲストユーザーの場合には、
編集ページが表示されないようにしました。

edit.html.erb
<% if @user.email == 'guestda@example.com'%>
       <p>ゲストユーザーはユーザー情報の編集ができません。</p>
      <% else %>
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2