Railsポートフォリオにゲストユーザー向けログインを作る

こんばんは!

f:id:yukitoku_sw:20200205212113p:plain

一生懸命ポートフォリオ作ってるんですけど、 見てもらわないと意味がないじゃないですか・・

思ったんですよ・・
見る側の人って、いちいち新規ユーザー登録なんかしてくれるのか?


【学習アウトプット2】離脱率を下げる!かんたんログイン機能の実装 - Qiita

【rails】かんたんログイン機能導入方法 - Qiita

ゲストログイン・簡単ログイン機能の実装方法(ポートフォリオ用) - Qiita


やはり!ありました!

そう簡単には見てもらえないらしいです!!


私みたいに単身・孤独・孤高の独学勢にはアドバイスくれる人なんていないんですよ!

目隠し綱渡りなんで、手思っきしブルンブルン振り回していかないと

実装方法(マネしてみました!!!)

*Deviceは使ってません


まず!

Controller

% rails g controller guest_sessions

既存のsessionsコントローラにアクションを追加してもokですが、一つのコントローラーに何でもかんでもアクションをブチ込むのはよくない!って何かで見ました!


新しく作りましょう


[ guest_sessions_controller.rb ]

class GuestSessionsController < ApplicationController
  skip_before_action :login_required

  def create
    user = User.find_by(email: 'test@example.com')
    log_in(user)
    flash[:success] = 'ゲストユーザーでログインしました'
    flash[:warning] = 'よろしくお願いします!'
    redirect_to todo_tasks_path(user)
  end
end
  1. user にゲストの方に入場して欲しいアカウントのemailをぶち込みます。*1

  2. そのユーザーでログインします。*2

  3. flashメッセージでちょっと遊びます。

  4. redirect_to でログイン後の表示ページを指定します。

  5. skip_before_action(最初忘れてて焦りました)


*1 ゲストユーザー用のアカウントを作りましょう。

*2 [ application_controller.rb ]

  def log_in(user)
      session[:user_id] = user.id
    end

こんな感じでやってます。

Routes

先ほどのアクションが実行されるようにします。

[ routes.rb ]

# 追加
post '/guest', to: 'guest_sessions#create'

多分どこでも良い。名前もなんでも良い。

とにかく、postであってコントローラー名#createです


View

先ほどのアクションが実行されるようにしたurlへ飛ばしましょう

 = link_to 'ゲストユーザー', guest_path, method: :post, class: 'btn btn-success'

method: :post大事。


ゲストユーザーでログインしてくれる人が必ずしも善人とは限らない。

ヘッダーに表示している編集画面へのリンクを隠す。(完璧な守りではない)

[ header ]

- if current_user
  - if guest_user              
    li.nav-item = active_link_to current_user.name, "#", class: 'nav-link disabled'
  - else
    li.nav-item = active_link_to current_user.name, edit_user_path(current_user), class: 'nav-link'

viewは極力シンプルを心がける

[ application_controller.rb ]

    def guest_user
      current_user == User.find_by(email: 'test@example.com')
    end

current_userがゲスト用アカウントの時はdisabledしてます。


以上です。


これでみんな気軽に見てくれるはず!!

<br /.