尝试在成功登录后将用户重定向到关联的“主页”页面w / out nil'ing stored_location_for(resource_or_scope)
...这给了我一些无限的重定向循环(很确定我已设置它错了)。
无论如何,我正在寻找更好的方法......
Devise's docs状态:之后 登录用户,确认 帐户或更新密码, 设计将寻找一个范围的根 重定向的路径。示例:对于a 它将使用
:user
资源user_root_path
如果存在, 否则默认为root_path
用过的。这意味着您需要设置 您的路线中的根:root :to => "home"
我是一个新手...如何为每个用户生成这个home_root_path
?
- (对象) after_sign_in_path_for (resource_or_scope)
之后要使用的默认网址 登录。这是所有Devise使用的 控制器,你可以覆盖它 在你的ApplicationController中 为自定义提供自定义挂钩 资源。 默认情况下,它首先尝试查找resource_root_path,否则 它使用根路径。对于用户 范围,您可以定义默认网址 通过以下方式:
map.user_root '/users', :controller => 'users' # creates user_root_path map.namespace :user do |user| user.root :controller => 'users' # creates user_root_path end
但是这些只为#ActionDispatch :: Routing :: Mapper:...`错误提供了undefined local variable or method
map'。
答案 0 :(得分:22)
如果您想使用路线重定向以回答以下问题:
如何为每个用户生成此home_root_path?
如果将它放在config / routes文件中,这将有效。在(例如)成功确认后,它会将用户重定向到文章#index。
match 'user_root' => 'articles#index', as: :user_root
答案 1 :(得分:6)
您可以尝试这样的事情:
application_controller.rb:
def after_sign_in_path_for(resource_or_scope)
# return home_page_path for user using current_user method
end
答案 2 :(得分:6)
挖了一下以找出同样的事情。 @ polarblau的回答是正确的,
def after_sign_in_path_for(resource_or_scope)
user_info_path(current_user)
end
其中user_info_path是您要显示的页面的路径。
另外,为了以防万一,我会允许这回到超级,虽然我不完全确定是否有必要......
def after_sign_in_path_for(resource)
if resource.is_a(User)
user_info_path(resource)
else
super
end
end
答案 3 :(得分:1)
我花了几个小时试图获得相同的功能,这就是最终为我工作的代码:
def after_sign_in_path_for(resource)
current_user
end
如果我曾尝试current_user_path
,我总是会遇到undefined local variable or method current_user_path
错误。
另外,我正在使用Rails 3.2.8和Devise 2.1.2。
希望有所帮助。
答案 4 :(得分:1)
根据@SnapShot的回答,这对我有用。我使用多个设计模型,尝试重定向回用户个人资料编辑页面。
get 'user_root', to: redirect('/users/edit'), as: :user_root