Ruby on rails 为Desive中的方法注销后标识用户
对于“登录后路径”,您可以执行以下操作:Ruby on rails 为Desive中的方法注销后标识用户,ruby-on-rails,ruby-on-rails-3,redirect,devise,Ruby On Rails,Ruby On Rails 3,Redirect,Devise,对于“登录后路径”,您可以执行以下操作: def after_sign_in_path_for(resource) if resource.class == User if resource.sign_in_count < 2 '/dashboard' else '/dashboard/home' end elsif resource.class == AdminUser I18n.locale = "en" '/ad
def after_sign_in_path_for(resource)
if resource.class == User
if resource.sign_in_count < 2
'/dashboard'
else
'/dashboard/home'
end
elsif resource.class == AdminUser
I18n.locale = "en"
'/admin/dashboard'
else
I18n.locale = "en"
'/'
end
end
这是行不通的。有没有办法检查一下
注意:虽然我已经做了一个monkey补丁并为admin定义了一个新的根,我的问题也解决了,但是我想知道,在设计方法的注销后,是否有任何方法可以使用
实现?设计在您登录后为您提供当前用户
。这与用户是管理员还是普通用户完全不同
所以这不是你可以用来做的
你可以用其他方法得到你想要的
一个是Cancan,它与Desive配合得很好,您可以定义用户角色
使用Cancan,您可以在users表中定义一列,比如role,为每个用户(如admin或general user)定义值。因此,将有Cancan的Ability.rb
文件,在那里您可以定义您的逻辑
您可以使用条件-
if user.role? :admin
#admin related logic
elsif user.role? :general
#general user related logic
end
这在这里行得通
def after_sign_out_path_for(resource_or_scope)
if resource_or_scope == :user
redirect_to ... # users path
elsif resource_or_scope == :admin
redirect_to .... # admins path
end
end
Desive将在使用类名的符号作为参数为注销路径后调用方法,因此我们可以基于该符号检查条件。在用户模型中,如果您有一列用于指定用户角色,则可以这样做
def admin?
role == "admin"
end
那么你所做的就是
def after_sign_out_path_for(user)
if user.admin?
好的,谢谢。。。但这是我已经知道的。设计中没有直接检查的方法吗?(虽然我知道问题是会话被破坏了。)
def after_sign_out_path_for(user)
if user.admin?