はじめに
ポートフォリオにゲストログインを実装したので
忘備録として残します。
その1.ルーティング
routes.rbにゲストログイン用のアクションを設定します。
SessionsController
に新しいアクションguest_sign_in
を準備します。
config/routes.rb
devise_scope :user do
post 'users/guest_sign_in', to: 'users/sessions#guest_sign_in'
end
その2.コントローラ
guest_sign_in
アクションを設定するため,app/controllersにusersディレクトリを作成し,その中に次のsessions_controller.rbを作成します。
app/controllers/users/sessions_controller.rb
# ゲストログイン機能
def guest_sign_in
user = User.guest
sign_in user
redirect_to parent_path(current_user.id)
end
その3.モデル
find_or_create_by!
で'guest@example.com' であるユーザーを検索します。
もし見つかればそのユーザーを返すが、無ければ作成します。
SecureRandom.alphanumeric(8)
を使って、8文字のランダムな
英数字のパスワードを作成しています。
app/models/user.rb
# ゲストログイン機能
def self.guest
find_or_create_by!(email: 'guest@example.com') do |user|
# 8文字の英数字のランダムパスワードを指定
user.password = SecureRandom.alphanumeric(8)
user.name = "guest_user"
end
end
その4.ビュー
今回はtopページにログインボタンを実装するので以下を追加して下さい!
app/views/homes/top.html.erb
<%= link_to 'ゲストログイン(閲覧用)', users_guest_sign_in_path, method: :post%>