こんにちは、おーしまです。
今回は、テストログイン機能を実装したので、それについて書きます。
テストログイン機能とは、ポートフォリオを面接官に見ていただく際に、できるだけ手間を省くためにボタン1つでテストユーザーにログインできる機能です。
この「テストログイン」ボタンを押せば、もともと登録してある「太郎」というユーザーでログインしたことになります。
実装方法です。
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でリンクを上記のように設定すれば、ルーティング通りに動いてくれます。
完成です。
今回はここまでです。
それではまた。