gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中调试 HTTP AUTH 参数?

转载 作者:行者123 更新时间:2023-12-04 05:55:05 25 4
gpt4 key购买 nike

ruby 爱好者,

进入我的 Rails 3 应用程序的 HTTP AUTH 参数有问题。密码末尾有一些空格。我正在调试我的客户端应用程序,它看起来发送正确。

我在我的应用程序中这样做:

params[:auth_username], params[:auth_password] = user_name_and_password(request)

然后我将它发送给 Warden。

我想查看原始数据以查看是否存在空格。如何做到这一点?

编辑:我调试了 httpd 和精简进程之间的连线,我很确定数据传输正确。我的 Rails 3.0.10 一定有问题。我能够解码 header 中的 base64 字符串,它不包含任何空格。

这看起来确实像 BASE64 解码器问题。可能是填充问题。我的字符串是:

Qmxvb21iZXJnOnRjbG1lU1JT

解码为

Bloomberg:tclmeSRS

正确使用非 Ruby base64 解码器。即使在 Ruby 中:

>> Base64.decode64 "Qmxvb21iZXJnOnRjbG1lU1JT"
=> "Bloomberg:tclmeSRS"

我不明白。在 Rails 中搜索错误报告或类似的东西。

编辑:事实证明我们的 Apache httpd 代理 向 header 添加了一些内容:

Authorization: Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic

这会导致密码末尾的字符不正确,因为:

>> Base64.decode64('Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic'.split(' ', 2).last || '')
=> "Bloomberg:tclmeSRS\005\253\""

现在的问题是 - 这是否正确?是 httpd 还是 rails 的 bug?

最佳答案

Rails user_name_and_password 方法调用执行以下操作的 decode_credentials,然后使用“:”拆分:

::Base64.decode64(request.authorization.split(' ', 2).last || '')

应用于您的数据:

::Base64.decode64("Qmxvb21iZXJnOnRjbG1lU1JT".split(' ', 2).last || '').split(/:/, 2)
=> ["Bloomberg", "tclmeSRS"]

一切似乎都很好,问题出在 IMO 的其他地方。从你的 Controller 转储授权数据:

render :text => "Authorization: #{request.authorization}"

关于ruby-on-rails - 如何在 Rails 中调试 HTTP AUTH 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9002753/

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