ポートファリオ用の作成が終わっても、忘れてはいけないことがあります。
「ゲストログイン機能」です。
採用担当者がポートフォリオにアクセスしたときに
わざわざ新規登録する必要があると面倒に思われ、ポートフォリオを見ない可能性があります。
採用担当者は数多くのポートフォリオを見ています。
採用側の立場になれば、面倒なことは避けてワンクリックで見たいものです。
少しでもログインしやすい状態にしましょう。
今回は、自身が行った実装方法と出てきたエラーを記載しています。
以下の記事と動画を参考に実装しました。
↓↓↓↓↓
###YouTube
⑴【Rails】あなたの簡単ログイン機能は大丈夫? ゲストログイン機能の実装方法 (前半)
⑵【Rails】あなたの簡単ログイン機能は大丈夫? ゲストログイン機能の実装方法 (後半)
上記の記事の 「その2 : ゲストログイン機能の実装方法」 で実装しました。
また、「Devise」を使用しているのを前提とします。
手順① routes.rbの設定
# 以下を追記
devise_scope :user do
post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in'
end
SessionsControllerに新しいアクションguest_sign_in を追加します。
devise_for :users と元々記述があっても上記を追加するだけで構いません。
#手順② controller.rbの設定
新しいアクションguest_sign_inを設定するため、app/controllersにusersディレクトリを作成します。さらにusersディレクトリの中にsessions_controller.rbを作成します。
# 以下を追加
class Users::SessionsController < Devise::SessionsController
def guest_sign_in
user = User.guest
sign_in user
redirect_to root_path
end
end
手順③ modelの設定
# 以下を追記
def self.guest
find_or_create_by!(email: 'guest@test.com') do |user|
user.password = SecureRandom.urlsafe_base64 # ランダムなパスワードを生成
end
end
手順④ viewsの設定
# 以下を追記
<%= link_to 'ゲストログイン(閲覧用)', users_guest_sign_in_path, method: :post %>
トップページにゲストログインボタンを表示する場合、この記述でOKです。
(表示スタイルは各自で変更します。)
#発生したエラー
##activerecord::recordinvalid in users::sessionscontroller#guest_sign_in
というエラーが発生しました。
調べたら上記の設定の場合は、ゲストユーザーのアカウントは
メールアドレスとパスワードの作成だけされています。
私は「name」を登録必須にしていたため、エラーが起こっていました。
nameのバリデーションは
validates :name, presence: true, length: { maximum: 7 }, format: {with: /\A[a-zA-Z]+\z/ }
と「アルファベット最大7文字まで」の制限をかけていたので
それに適する情報を、modelsに追記します。
def self.guest
find_or_create_by!(email: 'guest@test.com', name: 'guest') do |user|
user.password = SecureRandom.urlsafe_base64
end
end