1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ポートフォリオ】ゲストログイン機能の実装方法

Posted at

ポートファリオ用の作成が終わっても、忘れてはいけないことがあります。
ゲストログイン機能」です。

採用担当者がポートフォリオにアクセスしたときに
わざわざ新規登録する必要があると面倒に思われ、ポートフォリオを見ない可能性があります。

採用担当者は数多くのポートフォリオを見ています。
採用側の立場になれば、面倒なことは避けてワンクリックで見たいものです。
少しでもログインしやすい状態にしましょう。

今回は、自身が行った実装方法と出てきたエラーを記載しています。

以下の記事と動画を参考に実装しました。
↓↓↓↓↓

###YouTube
【Rails】あなたの簡単ログイン機能は大丈夫? ゲストログイン機能の実装方法 (前半)
【Rails】あなたの簡単ログイン機能は大丈夫? ゲストログイン機能の実装方法 (後半)

上記の記事の 「その2 : ゲストログイン機能の実装方法」 で実装しました。

また、「Devise」を使用しているのを前提とします。

手順① routes.rbの設定

confing>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を作成します。

app>controllers>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の設定

app>models>user.rb
# 以下を追記
def self.guest
    find_or_create_by!(email: 'guest@test.com') do |user|
      user.password = SecureRandom.urlsafe_base64 # ランダムなパスワードを生成
    end
  end

手順④ viewsの設定

app>views>layouts>application.html.erb
# 以下を追記
<%= 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に追記します。

models>user.rb
def self.guest
    find_or_create_by!(email: 'guest@test.com', name: 'guest') do |user|
      user.password = SecureRandom.urlsafe_base64
    end
  end

これで問題なく実装することができました!
image from Gyazo

参考記事

簡単ログイン・ゲストログイン機能の実装方法(ポートフォリオ用

1
5
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
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?