【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 .......
これによりかんたんログイン機能ができるようになります。