Rails版本:4.0.13
Devise版本:3.2.0
当用户尝试查看未经授权查看的页面时,我的应用程序会将其重定向到登录页面。
如果用户未登录,我想:
到目前为止,我试图像这样覆盖authenticate_user!
:
class BaseApiController < ActionController::Base
before_filter :authenticate_user!
def authenticate_user!
head :unauthorized
end
end
但是,尽管这确实会返回“ 401未经授权”,但它也会首先重定向到登录URL。
答案 0 :(得分:1)
这是您要找的吗?
这仍然会重定向用户,尽管您可以控制该重定向的位置。
答案 1 :(得分:0)
以@vinyl的答案为基础,如果用户未登录,则以下内容将返回401,而不进行重定向:
# lib/custom_failure.rb
class CustomFailure < Devise::FailureApp
def respond
http_auth
end
end
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = CustomFailure
end
您可以自定义respond
以在某些情况下重定向,而在其他情况下则抛出401个情况。对于我的用例,以下内容就足够了:
class CustomFailure < Devise::FailureApp
def respond
if request.env['REQUEST_PATH'].start_with?('/api')
http_auth
else
redirect
end
end
end
我不明白为什么覆盖authenticate_user!
在这里不起作用。