根据登录时的用户类型重定向用户

时间:2012-06-12 14:00:54

标签: ruby-on-rails session redirect

我有两个控制器:管理员和客户,另外还有一个用于处理登录和身份验证的会话。我正在尝试使用一个登录表单,这样当管理员登录时,它们会被重定向到他们的网站部分,如果客户登录,他们就会被带到他们自己的位置。

编辑:将params更改为通过电子邮件登录,但是当我尝试以客户身份登录时,现在收到错误No route match {:action =>“show”,:controller =>“customers”}:小号!!

代码:

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

编辑:将params更改为通过电子邮件登录,但是当我尝试以客户身份登录时,现在收到错误No route match {:action =&gt;“show”,:controller =&gt;“customers”}:小号!!

2 个答案:

答案 0 :(得分:1)

问题是你的params[:email]根本不存在!尝试使用params[:name],并希望您的客户知道他必须将他的电子邮件写入名称字段。

user = User.find_by_name(params[:name])
customer = Customer.find_by_email(params[:name])

答案 1 :(得分:0)

如果您只有一个登录表单,那么用户名/电子邮件的输入将以params哈希结尾为

params[:email]

params[:name]

但看起来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.

您可以发布视图代码吗?