gpt4 book ai didi

ruby-on-rails - 在 Rails 2.2+ 中测试 HTTP Basic Auth

转载 作者:行者123 更新时间:2023-11-28 19:41:48 25 4
gpt4 key购买 nike

作为我正在构建的 API 的一部分,有一个用户身份验证方法,该方法在成功后返回有用的用户信息、API token 等的负载。

在为处理此问题的 Controller 编写功能测试时,我遇到了测试 HTTP Basic 身份验证的问题;我发现许多博客都提到以下代码应该用于欺骗 header 以进行身份​​验证尝试:

@request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(email, pass)

问题是这没有效果; authenticate_with_http_basic 看不到 header ,因此即使存在有效凭据也会返回 false。

我错过了什么吗?

请注意,如果 Rails 2.2.2 对回答问题有用,则该应用已卡住。

最佳答案

我不确定这是否有帮助,但我只是在我自己的应用程序中进行了其中一项测试,除了我使用的是 Rails 2.3.2。

在我的例子中,问题是我忘记为用户添加固定装置,所以 crypted_pa​​ssword 不匹配(为什么它有任何值(value)对我来说仍然是个谜......我猜 Rails 没有'在运行测试之前清理测试数据库?)

class DonglesControllerTest < ActionController::TestCase
fixtures :users

test "index api" do
@request.env['HTTP_AUTHORIZATION'] = encode_credentials('one', 'one')

get(:index, { :name_contains => 'XXXX0001', :format => 'json' })

assert_equal 'application/json', @response.content_type
dongles = ActiveResource::Formats::JsonFormat.decode(@response.body)

expected_dongles = [
{ 'id' => 1,
'name' => 'XXXX0001',
'key_id' => 'usbstor\disk&ven_flash&prod_drive_sm_usb20&rev_1100\0000000000000000&0' }
]

assert_equal expected_dongles, dongles
end

private

# verbatim, from ActiveController's own unit tests
def encode_credentials(username, password)
"Basic #{ActiveSupport::Base64.encode64("#{username}:#{password}")}"
end
end

关于ruby-on-rails - 在 Rails 2.2+ 中测试 HTTP Basic Auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com