用Devise登录后重定向

rsl*_*rsl 25 ruby-on-rails devise

在使用Devise登录后,是否可以将用户重定向到不同的页面(基于角色)?它似乎只重定向到routes.rb中定义的root:to => ...页面

谢谢!

jan*_*223 29

默认情况下,Devise会在其操作后路由到root.有一篇关于在Devise Wiki上覆盖这些动作的好文章,https://github.com/plataformatec/devise/wiki/How-To: -Redirect-to-a-specific-page-on-successful-sign-in

或者你也可以通过设置走得更远stored_locations_for(resource)到零,然后为每个动作,即不同的重定向:after_sign_up_path(resource),after_sign_in_path(resource)等等.


Asn*_*tta 16

只需将此方法添加到应用程序控制器中即可

def after_sign_in_path_for(resource)
  user_path(current_user) #your path
end
Run Code Online (Sandbox Code Playgroud)


Ano*_*ava 5

您可以在应用程序控制器或任何需要执行操作的控制器中使用以下代码:

def after_sign_in_path_for(resource)
    users_path
end
Run Code Online (Sandbox Code Playgroud)


Pro*_*ton 5

Devise 有一个辅助方法after_sign_in_path_for,可用于在登录/登录后覆盖默认的 Devise 路由到 root。

要在登录后实现重定向到另一个路径,只需将此方法添加到您的应用程序控制器。

#class ApplicationController < ActionController::Base

def after_sign_in_path_for(resource)
  users_path
end
Run Code Online (Sandbox Code Playgroud)

其中 users_path 是您希望它重定向到的路径,User是与 Devise 模型对应的模型名称。

注意:如果您使用Admin作为 Devise 的模型名称,那么它将是

#class ApplicationController < ActionController::Base

def after_sign_in_path_for(resource)
  admins_path
end
Run Code Online (Sandbox Code Playgroud)

此外,如果您为 Devise 生成了控制器,那么您可以在会话控制器中定义它,例如,您的 Devise 模型是Admin,您可以在app/controllers/admins/sessions_controller.rb文件中定义它以路由到dashboard_index_path

# app/controllers/admins/sessions_controller.rb'

def after_sign_in_path_for(resource)
  dashboard_index_path
end
Run Code Online (Sandbox Code Playgroud)

注册控制器中-app/controllers/admins/registrations_controller.rb文件:

# app/controllers/admins/registrations_controller.rb

def after_sign_up_path_for(resource)
  dashboard_index_path
end
Run Code Online (Sandbox Code Playgroud)

就这样。

我希望这有帮助