技術系ブログ

とにかく小ネタで

【rails】かんたんログイン機能導入方法

参考:【学習アウトプット2】離脱率を下げる!かんたんログイン機能の実装 - Qiita

現在railsでポートフォリを作成中ですが、よりスムーズに使ってほしいためにこの機能を導入したくなったので作りました。
若干手抜き感が否めないですが、一応使えます。

これはdivise導入済みで進めていきます。

まずはテストユーザーで新規登録します。

name:テストユーザー
email:test@example.com
password:testtest

ログインを簡単にする機能なのでまずは登録ないと始まりません。

view側を編集

もともとviews/devise/sessions/new.html.slimというファイルがありますが中身を真似て、
views/devise/sessions/_testuser.html.slimというファイルを作ります。

_testuser.html.slim

    h2
      | かんたんログイン
    = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
      .field
        =f.hidden_field :email ,value: "test@example.com"
        =f.hidden_field :password ,value: "testtest"
      .actions
        = f.submit "かんたんログイン"

このように書いてviews/devise/registrations/new.html.slim

new.html.slim
.......
= render 'devise/sessions/testuser'

これで新規登録画面にかんたんログインボタンが表示されるようになります。

編集ボタンを隠す

私の場合はviews/users/show.html.slimにユーザー詳細画面がありますがテストユーザーのみ編集ボタンをを隠したいと思います

show.html.slim
.....
        - unless @user.email == "test@example.com"
          = link_to "edit",edit_user_registration_path

これではurlに直接打ち込むとアクセスできてしまうのが注意です。

deviseに対応したコントローラーを導入

$ rails g devise:controllers users

ルーティングの編集

userのコントローラーを作ったので、そこにアクセスするようにルーティングを編集します。

routes.rb

  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }

コントローラー内を編集

テストユーザーを編集、削除されてほしくないので制限する。

registrations_controller.rb

.......
before_action :forbid_test_user, {only: [:edit,:update,:destroy]}
.......

  private
  def forbid_test_user
      if @user.email == "test@example.com"
        flash[:notice] = "テストユーザーのため変更できません"
        redirect_to root_path
      end
  end
.......

これによりかんたんログイン機能ができるようになります。