如果用户访问登录页面但已登录,如何重定向?

时间:2017-09-07 15:10:12

标签: redirect controller routes ruby-on-rails-5

使用Rails 5,如果用户访问我的登录页面(/ login)并且他们已经登录,我该如何重定向?我试过了

class PagesController < ApplicationController
    ...
  def login
    respond_to do |format|
      if logged_in?
        format.html { redirect_to :controller => "my_controller", :action => "index" }
      end
    end
  end

其中&#34; logged_in?&#34;在我的application_controller.rb文件中定义,但我收到错误

ActionController::UnknownFormat

就行了

respond_to do |format|

似乎可能是一种非常简单的方法,我没有意识到这一点。我也没有使用设计,只使用我自己的登录机制。

1 个答案:

答案 0 :(得分:1)

如果用户未登录,您需要添加格式,实际上,如果用户是,您只需重定向,请尝试:

def login
  respond_to do |format|
    if logged_in?
      format.html { redirect_to controller: 'my_controller', action: 'index' }
    else
      format.html { ... } # redirect to another place
    end
  end
end

我认为只有在用户未登录时才能创建一个重定向方法,否则,请将其保留在那里,我想现在我明白了。它可以在您的应用程序控制器中,并应用于每个控制器,如:

before_action :require_login

private

def require_login
  redirect_to some_path unless logged_in?
end

如果你想允许在不登录的情况下访问某些控制器中的某些操作,那么你可以使用skip_before_action回调,如:

skip_before_action :require_login, only: :index # for instance