1

我在不应该出现通知时遇到问题。当我单击应用程序中的链接进行登录时,它会闪烁“无效的用户名/密码组合”通知,即使我没有输入任何内容。我明白为什么我会收到该消息 - 这是因为当我单击链接时,我没有输入匹配的用户名和密码,所以会触发错误。但我不确定如何解决这个问题。我希望在用户输入错误组合时出现错误,而不是在页面首次出现时出现。

在代码中,“用户”是指管理员,客户是客户。我为这两种类型的人使用相同的登录页面。

另外,我真正想要的是,当用户确实输入了错误的组合时,他们的电子邮件地址将保留在该字段中,这样他们就不必再次输入。我该怎么做呢?

谢谢!!

这是更新的控制器代码:

class SessionsController < ApplicationController
  skip_before_filter :authorize
  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_path(session[:customer_id]) 

  else
    render :new, notice: "Invalid email/password combination"
  end
 end

  def destroy
    session[:user_id] = nil
    session[:customer_id] = nil
    redirect_to store_url, notice: "Logged out"
  end
end
4

3 回答 3

0

仅在与请求一起发送登录参数时设置闪烁通知:

# ...
else
  flash[:notice] = "Invalid username/password combination" if params[:email] || params[:password]
  redirect_to login_url
end
于 2012-06-20T08:26:04.417 回答
0

尝试用这个替换你的最后一个 else 语句:

else
  if params[:email] || params[:password]
    flash[:notice] = "Invalid username/password combination"
    redirect_to login_url
  end
end

这应该够了吧。关于您在用户输入错误密码时有关在字段中保留的电子邮件地址的问题,请查看此链接:这里

该解决方案的一般要点是使用'render'而不是'redirect_to'在您的代码中重新加载页面。

于 2012-06-20T09:05:47.317 回答
0

我建议您将所有内容包装if params并重新render查看,而不是重定向以保留电子邮件。

if params
  if user ...
    ...
  elsif ...
    ...
  else
    render :new
于 2012-06-20T08:37:27.330 回答