0

我正在尝试实现登录表单,但我的路由似乎是错误的。当身份验证失败时,应用程序会重定向到 subdomain.domain.com/login,但它应该只再次呈现登录页面(仅 subdomain.domain.com 没有“/login”)。

意见/登录/index.html

<%= form_tag(check_login_path, :method => "post")  do %>
    ... form fields
<% end %>

路线.rb

constraints(Subdomain) do
  match '/' => 'login#index', :as => :login
  match '/login' => 'login#check', :as => :check_login
  match '/dashboard' => 'dashboard#index', :as => :dashboard    
end

登录控制器.rb

class LoginController < ApplicationController

  def index
      # some index logic
  end

  def check

    # authenticate with mite.yo.lk account login

    Mite.account = params[:domain]
    Mite.authenticate(params[:email], params[:password])
    if Mite.validate
      redirect_to dashboard_path
    else
      flash[:error] = "not valid"
      render :template => 'login/index'
    end
  end

end
4

1 回答 1

2

在您的路线中,您将“/登录”路由到该check操作,然后在该操作中您正在呈现一个验证失败的模板。渲染不会更改 URL,这就是您最终使用 url '/login' 的原因。

如果您希望用户在登录尝试失败后看到根 url,那么您需要将 更改renderredirect_to :index

if Mite.validate
  redirect_to dashboard_path
else
  flash[:error] = "not valid"
  redirect_to :index
end

或者,您可以将check_login使用根 url 的路径替换为 POST 请求,并将login路径路由到根仅用于 GET 请求,如下所示:

constraints(Subdomain) do
  get '/' => 'login#index', :as => :login
  post '/' => 'login#check', :as => :check_login
  match '/dashboard' => 'dashboard#index', :as => :dashboard    
end

如果您这样做,那么您应该能够保持当前控制器代码不变并获得您想要的结果。

于 2012-10-27T10:06:53.323 回答