authenticate_or_request_with_http_basic
当我在块的开头添加调用时,我有一个有效的控制器操作会中断。这是无效的操作代码:
def index
authenticate_or_request_with_http_basic do |username, password|
username == "test1" and password == "test"
end
render layout: false, content_type: 'application/xml'
end
我在浏览器窗口中收到“AbstractController::DoubleRenderError”错误响应,并带有以下消息:
在此操作中多次调用渲染和/或重定向。请注意,您只能调用渲染或重定向,并且每个操作最多调用一次。另请注意,重定向和渲染都不会终止操作的执行,因此如果您想在重定向后退出操作,则需要执行“redirect_to(...) and return”之类的操作。
当我将“authenticate_or_request_with_http_basic”逻辑放在一个单独的操作中,然后配置一个 before_filter 来为索引操作运行它时,一切都很好。但是,我不会将这个逻辑重用于索引以外的任何操作,我想知道为什么上面的代码不起作用。
解决方案
在 Tyler 和 RKB 的帮助下,我找到了解决方案。这里是:
authenticated = authenticate_or_request_with_http_basic "Authentication Required" do |username, password|
@user = User.find_by_username(username)
@user != nil && password == "test"
end
return unless authenticated == true
authenticate_or_request_with_http_basic
如果身份验证成功,则返回“true”。失败时返回 401。