在我的应用程序中,我使用Devise对用户进行身份验证,我注意到如果登录失败,您可以更改重定向到的页面。在维基上,我找到了以下示例:
class CustomFailure < Devise::FailureApp
def redirect_url
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
end
按照这个例子,我创建了自己的CustomFailure类(custom_failure.rb)并放在帮助文件夹中(不知道放在哪里)。这是我创建的以下课程:
class CustomFailure < Devise::FailureApp
def redirect_url
new_user_session_url(:subdomain => 'secure')
end
# Redirect to root_url
def respond
if http_auth?
http_auth
else
root_url
end
end
end
我还在config / initializers / devise.rb文件中添加了以下内容(因为维基状态应该完成):
config.warden do |manager|
manager.failure_app = CustomFailure
end
虽然我没有收到任何错误,但是当我错误地登录时,它仍会重定向到/ users / sign_in页面(不是根页面)并且没有加载任何内容(即使源不为空,页面也是完全白色的)。我的CustomFailure类是否有问题,或者它在错误的文件夹中?
我正在使用Rails 3.0.1和Devise 1.1.rc0。
找到此代码的Wiki位于:How To: Redirect to a specific page when the user can not be authenticated
答案 0 :(得分:19)
尝试将custom_failure.rb
放入lib
文件夹,因为它不是帮助程序。然后确保加载文件。您可能会尝试自动加载lib
中的所有文件。
编辑:要实现自动加载的库,您需要将以下内容插入application.rb
:
config.autoload_paths += %W(#{config.root}/lib)
EDIT2 :您在尝试重定向时忘了拨打redirect_to
。目前respond
仅返回root_url
。试试这个:
def respond
if http_auth?
http_auth
else
redirect_to root_url
end
end
fyi:设计人员在重定向之前也执行此操作:
store_location!
flash[:alert] = i18n_message unless flash[:notice]