Ruby on rails 在用户登录失败后设计重定向

Ruby on rails 在用户登录失败后设计重定向,ruby-on-rails,session,login,devise,overriding,Ruby On Rails,Session,Login,Devise,Overriding,我知道有一个关于它的wiki页面,但由于我对Rails非常陌生,所以我在理解该页面时遇到了很多困难 我必须为我的用户覆盖注册控制器。当用户登录失败时,我希望他被重定向到我的自定义登录页面。但是申请书把他送到了创业板里面的登录页面 我怎样才能做到这一点我应该把这门课放在哪里,如何更改它? 我有多个型号,每个型号都有不同的登录页如何设置每个型号的范围? class CustomFailure < Devise::FailureApp def redirect_url #retu

我知道有一个关于它的wiki页面,但由于我对Rails非常陌生,所以我在理解该页面时遇到了很多困难

我必须为我的用户覆盖注册控制器。当用户登录失败时,我希望他被重定向到我的自定义登录页面。但是申请书把他送到了创业板里面的登录页面

我怎样才能做到这一点我应该把这门课放在哪里,如何更改它? 我有多个型号,每个型号都有不同的登录页如何设置每个型号的范围?

class CustomFailure < Devise::FailureApp

  def redirect_url

    #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope
    new_user_session_url(:subdomain => 'secure')
  end

 # You need to override respond to eliminate recall
 def respond
   if http_auth?
     http_auth
   else
     redirect
   end
 end
class CustomFailure“安全”)
结束
#您需要覆盖响应以消除召回
def响应
如果http_auth?
http_auth
其他的
重新使用
结束
结束
结束


设计是一个强大的宝石,但是一些维基页面没有考虑到有很多新的程序员

< P> >我在代码< >LIB < /C> >中直接有过Auth-Author失败。

下面是一个简单的版本,展示了如何为用户处理不同的作用域

class MyAuthFailure < Devise::FailureApp

  # add different cases here for diff scopes.
  def redirect_url 
    if warden_options[:scope] == :user 
      root_path 
    elsif warden_options[:scope] == :admin 
      admin_root_path 
    end 
  end 

  # You need to override respond to eliminate recall
  def respond
    if http_auth?
      http_auth
    else
      redirect
    end
  end  
end
类MyAuthFailure

您会将该类放入
/lib/my\u auth\u failure.rb

此解决方案非常有效,但如果您不按照本文的建议进行测试,您将遇到问题:

您的测试仍将使用默认值重定向

例如:

current_path.should == signin_path

将失败,因为当前路径实际上是
用户/sign\u in
或其他内容。

请查看此[post][1]。这可能对你有帮助。[1] :好的,这就是我所尝试的:我已经为我的每个模型设置了路由,正如维基所建议的,新的“模型”\u会话\u路径,但我在这里遇到了同样的问题。失败登录不要重定向到我的视图,而是设计一个视图您将CustomFailure.rb文件放在哪里?它看起来还是和你上面贴的一样吗?问题是这个。我不知道该怎么说。我应该为每个模型创建一个新文件吗?我应该将该文件放在哪里?或者我必须为所有型号保留一个文件吗?不。这对我不起作用。我是照你说的做的。我也需要注册管理员
elsif warden_options[:scope]==:admin new_admin_session_path end
和从我的路径:
new_admin_session GET/admin(:format)admin/sessions#new
但它一直重定向到/sign而不是/admin