おーしまブログ

プログラミングやってます

<rails>テストログイン機能の実装

こんにちは、おーしまです。

今回は、テストログイン機能を実装したので、それについて書きます。

テストログイン機能とは、ポートフォリオを面接官に見ていただく際に、できるだけ手間を省くためにボタン1つでテストユーザーにログインできる機能です。
f:id:tomo_bb_aki0118115:20201214161553p:plain

この「テストログイン」ボタンを押せば、もともと登録してある「太郎」というユーザーでログインしたことになります。





実装方法です。

rails g devise:controllers users

これで、controllers/users にいくつかのコントローラーが生成されます。



  devise_for :users, :controllers => {
    :registrations => 'users/registrations',
    :sessions => 'users/sessions',
   }
  devise_scope :user do
    get "sign_in", :to => "users/sessions#new"
    get "sign_out", :to => "users/sessions#destroy" 
    post 'users/guest_sign_in', to: 'users/sessions#new_guest'
  end

  resources :users, only: :show 

このようにルーティングを設定します。
resources :users, only: :show はもともとあったユーザーの詳細画面のルーティングです。ユーザーの詳細画面をルーティングがある方は、それより上にテストログインのルーティングを設定します。devise_for というdeviseを使う際に、自動生成されるルーティングが書かれている場合はそちらも削除します。





controllers/users/sessions_controller.rb

  def new_guest
    user = User.guest
    sign_in user
    redirect_to root_path
  end

上記のように、new_guestメソッドを定義します。

models/user.rb

  def self.guest
    find_or_create_by(email: "tarou@gmail.com") do |user|
      user.password = "~~~~~~"
    end
  end

userモデルには、上記のように、guestというクラスメソッドを定義します。
find_or_create_byメソッドでemailが「tarou@gmail.com」というユーザーを探し、無ければ、新しく「tarou@gmail.com」でユーザーを作ります。user.passwordでパスワードを設定します。テストログインのパスワードのため、知られても問題がないので、環境変数は用いませんでした。コントローラーでsign_inし、redirect_toでトップページに遷移するようにしています。


 <li><%= link_to 'テストログイン', users_guest_sign_in_path, method: :post, class:'header-user-btn' %></li>

htmlでリンクを上記のように設定すれば、ルーティング通りに動いてくれます。



完成です。



今回はここまでです。
それではまた。

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}