管理者と顧客の2つのコントローラーに加えて、ログインと認証を処理するための1つの呼び出されたセッションがあります。管理者がログインするとサイトの自分の部分にリダイレクトされ、顧客がログインすると自分の部分に移動するように、1つのログインフォームを使用しようとしています。
編集:電子メールでログインするようにパラメータを変更しましたが、顧客としてログインしようとすると、{:action => "show"、:controller => "customers"}に一致するルートがありませんというエラーが表示されます:S !!
コード:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
customer = Customer.find_by_email(params[:email])
if user and user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to admin_url
elsif customer and customer.authenticate(params[:password])
session[:customer_id] = customer.id
redirect to customer_url
else
redirect_to login_url, alert: "Invalid user/password combination"
end
end
def destroy
session[:user_id] = nil
session[:customer_id] = nil
redirect_to store_url, notice: "Logged out"
end
end
ログインページのコード(app / sessions / new.html.erbに保存):
<div class="depot_form">
<% if flash[:alert] %>
<p id="notice"><%= flash[:alert] %></p>
<% end %>
<%= form_tag do %>
<fieldset>
<legend>Please Log In</legend>
<div>
<%= label_tag :email, 'Email:' %>
<%= text_field_tag :email, params[:email] %>
</div>
<div>
<%= label_tag :password, 'Password:' %>
<%= password_field_tag :password, params[:password] %>
</div>
<div>
<%= submit_tag "Login" %>
</div>
</fieldset>
<% end %>
</div>
また、関連する場合は、config/routesファイルにこれがあります。
controller :sessions do
get 'login' => :new
post 'login' => :create
delete 'logout' => :destroy
end
編集:電子メールでログインするようにパラメータを変更しましたが、顧客としてログインしようとすると、{:action => "show"、:controller => "customers"}に一致するルートがありませんというエラーが表示されます:S !!