1
0

More than 1 year has passed since last update.

ゲストログイン機能

Last updated at Posted at 2023-09-20

初学者の備忘録

初学者の備忘録です。今回はdeviseを使用したゲストログイン機能編

ゲストログイン

ゲストログインとはユーザーログインのようにメールアドレスやパスワード登録などをしなくても、ある程度制限のある中で気軽に会員と同じ機能を使えるログイン方法のことです。実務ではあまり使用しない機能らしいのですが、PFなど自分の作品を誰かに発表するときなどはある方が便利らしいです。

今回はそんなゲストログイン機能をdeviseを使用して作成したいと思います。

実装

【1】 コントローラー
deviseでサインイン機能はできているので、あとはどのユーザーをログイン状態にするか指定してあげればいいです。

app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
  def guest_sign_in
    user = User.guest
    sign_in user
    redirect_to user_path(user), notice: "guestuserでログインしました。"
  end
end

【2】 ルーティング
ルーティングの設定をします。

app/controllers/users/sessions_controller.rb
:
:

  devise_scope :user do
    post "users/guest_sign_in", to: "users/sessions#guest_sign_in"
  end

:
:

【3】 メソッド
モデルにguestメソッドを定義します。

app/models/user.rb
:
:
# 定数にメールアドレスを格納
GUEST_USER_EMAIL = "guest@example.com"

  def self.guest
    # find_or_create_byでメールアドレスが存在するかどうか判断。存在しない場合はデータを作成する。
    find_or_create_by(email: GUEST_USER_EMAIL) do |user|
        # SecureRandom.urlsafe_base64:ランダムな文字列を生成するRubyのメソッド
      user.password = SecureRandom.urlsafe_base64
      user.name = "guestuser"
    end
  end

:
:

ゲストユーザーに必要なカラムが存在したら

補足 find_or_create_byとは条件を指定してその条件に合致した場合、合致した1件のデータを取ってくる。存在しなかった場合は新規作成するメソッドです。
似たようなものでfind_or_create_byメソッドがありますが、こちらは作成ではなくnewアクションになるのでデータベースに保存されません。保存したい場合はsaveをしないいけません。
whereメソッドは条件に合致したデータを全て取得してしまいますので、今回の場合はふさわしくありません。

【5】 ログインボタン
ビューにゲストログインボタンを追加しましょう。ここは自由に作成してください。
例としてあげて起きます。

app/views/homes/top.html.erb
<%= link_to "ゲストログイン(閲覧用)", users_guest_sign_in_path, class: "btn btn-secondary btn-sm btn-block mb-3 sign_in", method: :post %>

以上で実装終了です。お疲れ様でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0