登录后重定向到特定URL

时间:2010-09-03 13:20:18

标签: ruby-on-rails devise

在Devise 1.0中,Rails 2.3的库是否有办法在登录后重定向到特定的URL而不是root_url?

编辑:忘记提及它的设计1.0

3 个答案:

答案 0 :(得分:21)

有可能在调用after_sign_in_path之前重定向您的用户。如果用户尝试直接转到受身份验证保护的页面,则会发生这种情况。如果您的root_path('/')受身份验证保护,则会一直发生这种情况。

谷歌小组讨论了这个话题:

快速而肮脏的解决方案是覆盖stored_location_for以始终返回nil,如下所示:

class ApplicationController < ActionController::Base  
...

  private 
  def stored_location_for(resource_or_scope)
    nil
  end

  def after_sign_in_path_for(resource_or_scope)
    my_favorite_path
  end
end

答案 1 :(得分:4)

我认为Devise中的after_sign_in_path_for方法正是您所寻找的。

在ApplicationController中定义该方法,它将覆盖Devise的默认实现。这是文档指定的内容。

详细信息:http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for

答案 2 :(得分:0)

假设您想在登录后显示用户的信息中心。

class HomesController < ApplicationController    
    def index
       if current_user //returns nil if not logged in
          @users = User.all
          render :dashboard
       end
    end

    def dashboard
       @users = User.all
    end
end

在routes.rb中:

root :to => 'homes#index'

如果已登录,则在索引操作中输入if-block并渲染dashboard.erb。 (确保在if-block中初始化dashboard.erb所需的所有变量) 否则rails会渲染index.erb