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?