こんばんは!
一生懸命ポートフォリオ作ってるんですけど、 見てもらわないと意味がないじゃないですか・・
思ったんですよ・・
見る側の人って、いちいち新規ユーザー登録なんかしてくれるのか?
【学習アウトプット2】離脱率を下げる!かんたんログイン機能の実装 - 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
user にゲストの方に入場して欲しいアカウントのemailをぶち込みます。*1
そのユーザーでログインします。*2
flashメッセージでちょっと遊びます。
redirect_to でログイン後の表示ページを指定します。
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 /.