Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 登录后重定向到特定URL_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 登录后重定向到特定URL

Ruby on rails 登录后重定向到特定URL,ruby-on-rails,devise,Ruby On Rails,Devise,在Rails 2.3的库Devise 1.0中,有没有办法在登录后重定向到特定的URL而不是根URL 编辑:忘记提到它是Desive 1.0我认为Desive中的方法在路径中签名后的就是你要找的 在ApplicationController中定义该方法,它将超越Desive的默认实现。这是文档指定要执行的操作 此处的详细信息:您的用户很有可能在调用路径中的后的之前被重定向。如果用户试图转到直接受身份验证保护的页面,则会发生这种情况。如果您的根路径('/')受到身份验证的保护,则这种情况将一直发生

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


编辑:忘记提到它是Desive 1.0

我认为Desive中的
方法在路径中签名后的
就是你要找的

在ApplicationController中定义该方法,它将超越Desive的默认实现。这是文档指定要执行的操作


此处的详细信息:

您的用户很有可能在调用路径中的
后的
之前被重定向。如果用户试图转到直接受身份验证保护的页面,则会发生这种情况。如果您的
根路径
('/')受到身份验证的保护,则这种情况将一直发生

关于这个话题,谷歌集团有一个讨论:

快速而肮脏的解决方案是覆盖的
存储位置,\u以始终返回
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
class ApplicationController
假设您想在登录后显示用户的仪表板

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
如果登录,则在索引操作中输入块并呈现dashboard.erb。 (确保在if块中初始化dashboard.erb所需的所有变量)
否则rails会呈现index.erb

我忘了在Desive 1.0中提到,而不是在1.1中提到。在1.0.8中根本没有调用\u sign\u in\u path\u for之后。查看Desive的SessionController,当登录成功时,在\u中签名并调用\u重定向。这将重定向到会话中存储的上一个位置。如果没有存储位置,则在对路径中的进行签名后调用。用户是否从(或通过)主页登录?这可以解释为什么它总是重定向回那里。那么,为什么不向该方法添加raise不会导致它停止请求?您添加raise的方法是什么-sign\u in\u和\u redirect?您是在使用默认的设计控制器/视图,还是覆盖了其中的任何部分?作为一个细微的变化,我只从存储的位置返回nil,如果它与我的默认路由“/”匹配。这样,只有在他们没有明确尝试去其他地方的情况下,他们才会在路径中签名后去。为此,只需将nil替换为“(location=super)='/'?nil:location”。
root :to => 'homes#index'