kazukiayk79
@kazukiayk79

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

モデルを複数用意した際のログイン機能実装について

解決したいこと

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

No Answers yet.

Your answer might help someone💌