用户登录失败后设计重定向

时间:2012-06-13 15:31:24

标签: ruby-on-rails session login devise override

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

我不得不为我的用户覆盖注册控制器。当用户无法登录时,我希望将他重定向到我的自定义登录页面。但是应用程序将他发送到gem内的登录页面。

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

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

Devise是一个强大的宝石,但是一些wiki页面并不认为可以有很多新的程序员

2 个答案:

答案 0 :(得分:1)

我直接在/lib进行了我的身份验证失败覆盖课程。

这是一个简单的版本,展示了如何为用户处理不同的范围。

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

您将此课程放在/lib/my_auth_failure.rb

答案 1 :(得分:0)

此解决方案效果很好,但如果您不执行本文中的建议,您将遇到测试问题:

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated

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

例如:

current_path.should == signin_path

会失败,因为当前路径实际上是users/sign_in或其他东西。