モデルを複数用意した際のログイン機能実装について
解決したいこと
Userのモデルを追加した際に1つのログインページで2つのUserモデルのログイン処理を行うことは可能でしょうか?
例)
Ruby on Railsでログイン機能を実装しています。
gemのdeviceは使用していません。
現在の状況としてはUserモデルが一つ用意してありsessionコントローラーを作成してログイン機能は作成済みです。
そこで、GeneralUserモデルを追加で作成し、現在あるUserモデルのログインページからログイン処理を行いたいです。
開発環境
・Ruby: 2.5.3
・Rails: 6.1.1
・OS: ubuntu
ルーティング
get "login", to: 'sessions#new'
post "login", to: 'sessions#create'
delete "logout", to: 'sessions#destroy'
コントローラー
def create
email = params[:session][:email].downcase
password = params[:session][:password]
if login(email, password)
flash[:success] = "ログインに成功しました"
redirect_to @user
else
flash.now[:danger] = "ログインに失敗しました"
render :new
end
end
def destroy
session[:user_id] = nil
flash[:success] = "ログアウトしました"
redirect_to root_url
end
private
def login(email, password)
@user = User.find_by(email: email)
if @user && @user.authenticate(password)
session[:user_id] = @user.id
return true
else
return false
end
end
ログインフォーム
<%= form_with(url: login_path, scope: :session, local: true) do |f| %>
<div class="form-group">
<%= f.label :email, 'Email' %>
<%= f.email_field :email, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :password, 'Password' %>
<%= f.password_field :password, class: 'form-control' %>
</div>
<%= f.submit 'Log in', class: 'btn btn-primary btn-block' %>
<% end %>
自分で試したこと
ルーティングにてGetとPostのURLをUserモデルとGeneralUserモデル用で2つずつ用意し
ルーティングによってformの送り先を変えることができないかを検討。
検討しましたがformの送り先を分岐する方法は思いつかず、ログインページを追加したモデル用で追加作成しかないでしょうか?
表現が足りていなければ申し訳ありません。
お忙しいところ恐縮ですがアドバイスをいただけたらと思います。
0