1

我有两个控制器:管理员和客户,还有一个用于处理登录和身份验证的调用会话。我正在尝试使用一种登录表单,以便当管理员登录时,他们会被重定向到他们所在的网站部分,如果客户登录,他们会被带到他们的部分。

编辑:将参数更改为通过电子邮件登录,但现在当我尝试以客户身份登录时出现错误 No route matches {: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

编辑:将参数更改为通过电子邮件登录,但现在当我尝试以客户身份登录时出现错误 No route matches {: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

如果您只有一个登录表单,则用户名/电子邮件的输入将在 params 哈希中结束

params[:email]

或者

params[:name]

但看起来 params[:email] 不存在,因为您只使用一种形式。由于您可以成功地以管理员身份进行身份验证,我猜想用户名的输入标题为“名称”,因此在您的参数哈希中,当您以客户身份进行身份验证时,您的身份验证针对

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 回答