Ruby on rails 登录后重定向到特定URL
在Rails 2.3的库Devise 1.0中,有没有办法在登录后重定向到特定的URL而不是根URLRuby 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的默认实现。这是文档指定要执行的操作 此处的详细信息:您的用户很有可能在调用路径中的后的之前被重定向。如果用户试图转到直接受身份验证保护的页面,则会发生这种情况。如果您的根路径('/')受到身份验证的保护,则这种情况将一直发生
编辑:忘记提到它是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'