0

我知道有一个关于它的 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

结尾

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

4

2 回答 2

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

于 2012-06-13T16:22:35.413 回答
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什么。

于 2013-09-03T15:16:20.297 回答