加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 测试Rails中的HTTP基本验证2.2

发布时间:2020-12-16 19:38:04 所属栏目:百科 来源:网络整理
导读:作为我正在构建的API的一部分,有一种用户认证方法,成功后,返回有用的用户信息,API令牌等的有效载荷. 在编写处理这个的控制器的功能测试时,我正在运行一个测试HTTP Basic认证的问题;我发现许多博客提到以下代码应该用于欺骗头来进行身份验证尝试: @request.e
作为我正在构建的API的一部分,有一种用户认证方法,成功后,返回有用的用户信息,API令牌等的有效载荷.

在编写处理这个的控制器的功能测试时,我正在运行一个测试HTTP Basic认证的问题;我发现许多博客提到以下代码应该用于欺骗头来进行身份验证尝试:

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

问题是这没有效果; authenticate_with_http_basic没有看到标题,因此即使存在有效的凭据也返回false.

我错过了什么吗?

请注意,如果应用程序在回答中很有用,则该应用程序将冻结到Rails 2.2.2.

解决方法

我不知道这是否有帮助,但我只是在自己的应用程序中进行了其中一个测试,除了我使用的是Rails 2.3.2.

在我的情况下,这个陷阱是我已经忘记为用户安装了固定装置,所以crypted_pa??ssword不匹配(为什么它有任何价值对我来说依然是一个谜…我猜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' => 'usbstordisk&ven_flash&prod_drive_sm_usb20&rev_1100000000000000000&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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读