見出し画像

Railsでゲストユーザー機能を実装してみた

ゲストユーザー機能とは何か

個人アプリ用にゲストユーザー機能というものを実装してみました。
ちなみにゲストユーザー機能とは
煩わしい新規登録やログインをしなくてもワンクリックで
登録が完了して、サイトを閲覧できるようになるというものです。
動きとしては
データベースにゲストユーザーの有無を確認して
いる場合はログイン、いない場合は作成という流れになります。
パスワードもランダムパスなので覚える必要がありません。
こちらの記事が大変参考になりました。
https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104
YouTubeでも解説されているのでそちらをみても
理解が深まるかと思います。

実装手順

自分のWEBアプリの状況
・Devise実装済み
・トップページがhome#index
上記で紹介した方の記事に非常に類似している状況でしたので
ものすごく簡単に実装できました。

config > routes.rb

root "home#index"
--以下のコードを追記する--
post '/home/guest_sign_in', to: 'home#new_guest'
app > controller > home.controller.rb

def new_guest
   user = User.find_or_create_by(email: 'guest@example.com') do |user|
     user.password = SecureRandom.urlsafe_base64
     user.name = "ゲストユーザー"
   end
   sign_in user
   redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。'
 end

コードの解説

・new_guestメソッドを作成
・userにユーザーがいる場合はサインイン、いない場合はcreate
・user.passwordはランダムに生成(下記公式リファレンス)
https://docs.ruby-lang.org/ja/latest/method/SecureRandom/s/urlsafe_base64.html
・user.name:自分のdeviseにはnameカラムが存在しており
user.nameで表示しているので、追記しました。
nicknameやimageを設定されている方は適宜追加してみて下さい。
・redirect_to サインインした後のページ指定をしています。
ユーザーが最初に訪れるページが良ければroot_pathでOKです。
・notice:はフラッシュメッセージになります。
devise導入時に一緒に導入されていると思います。

ゲストログインボタンの設置(haml表記になります)

--設置したい場所に下記コードを追記--
= link_to "ゲストログイン(閲覧用)", home_guest_sign_in_path, method: :post, class:"自身のクラスをどうぞ"
--erb表記はこちらですね--
<%= link_to 'ゲストログイン(閲覧用)', home_guest_sign_in_path, method: :post %>

以上でゲストログインボタンの設置が完了です。
簡単に設置できる上、非常に扱いやすいので実装してみてはどうでしょうか

ここまで読んでいただきありがとうございました。
プログラミングで新しい知識を得て実装できたら
こちらにどんどんアウトプットしていこうと思います。

この記事が気に入ったらサポートをしてみませんか?