Ped*_*nto 10 ruby ruby-on-rails devise ruby-on-rails-3.1
我有一个root_path不受用户保护的Rails应用程序,即它是一个简单的门户主页,带有登录表单.
用户登录后,我希望它能够访问dashboard_path.
我这样做了:
def signed_in_root_path(scope_or_resource)
dashboard_path
end
Run Code Online (Sandbox Code Playgroud)
这显然应该在用户root_path登录时使用,并且我不希望它进入,同时仍然保持用户返回到前一页,如果它试图击中受限区域并且它要么超时要么没有记录在.
即:
restricted_page - > login - > restricted_page_but_logged_in
我不想改变这种行为,这就是我没有使用过的原因after_sign_in_path,但是如果它打开了,或者想要重定向它root_path,或者任何不需要用户身份验证的路由.
我的问题是这不起作用.登录后,我将被重定向回来root_path,我相信这是因为after_sign_in_path之前被触发了.
有没有办法做到这一点?谢谢!
编辑:这是我第二次登录时工作,即我去root_path,登录,获取闪存消息,说明我已登录,并在表单上再次输入用户名和密码root_path.我成功地被重定向到了dashboard_path.不过,不是我想要的行为.
Nav*_*eed 22
只是一个想法
您可以为登录的URL定义两个根URL,这将指向仪表板,第二个用于非签名用户,这将指向登录页面
根据routes.rb中的一些约束定义不同的根URL
constraints(AuthenticatedUser) do
root :to => "dashboard"
end
Run Code Online (Sandbox Code Playgroud)
root :to=>"users/signin"
Run Code Online (Sandbox Code Playgroud)
然后在lib/authenticated_user.rb中创建类AuthenticatedUser
class AuthenticatedUser
def self.matches?(request)
user_signed_in?
end
end
Run Code Online (Sandbox Code Playgroud)
现在,如果用户登录root_url将指向仪表板,否则它将指向登录页面
你也可以创建两个根(尚未测试)
root :to => "dashboard", :constraints => {user_signed_in?}
root :to => "users/signin"
Run Code Online (Sandbox Code Playgroud)
更多关于约束 http://edgeguides.rubyonrails.org/routing.html#request-based-constraints
注意
url的优先级基于创建顺序,首先创建 - >最高优先级资源