1

管理者と顧客の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 !!

4

2 に答える 2

1

問題は、あなたparams[:email]がまったく存在しないことです! を使用してみてparams[:name]、顧客が名前フィールドに電子メールを書く必要があることを知っていることを願っています.

user = User.find_by_name(params[:name])
customer = Customer.find_by_email(params[:name])
于 2012-06-12T14:20:16.697 に答える
0

ログインフォームが 1 つしかない場合、ユーザー名/電子メールの入力は、いずれかのように params ハッシュになります。

params[:email]

また

params[:name]

しかし、フォームを 1 つしか使用していないため、params[:email] が存在しないようです。管理者として正常に認証できるため、ユーザー名の入力のタイトルは「name」であると推測します。したがって、params ハッシュでは、顧客として認証するときに、

params[:name] #this is what I think the input on the form is named

それ以外の

params[:email]  #which is what it looks like your code is looking for.

ビューコードを投稿できますか?

于 2012-06-12T14:21:11.877 に答える