我有一个连接到 iphone 应用程序的应用程序,该应用程序又通过 http_digest 对其用户进行身份验证。
我正在使用 authlogic,在我的架构中,网站的用户是“用户”,手机应用程序的用户是“人”。所以,我有 user_sessions 和 people_sessions。为了处理 http_digest 身份验证,我使用了如下的 authenticate_or_request_with_http_digest 方法:
def digest_authenticate_person
authenticate_or_request_with_http_digest do |email, password|
#ldb is just a logging method i have
ldb "email = #{email.inspect}, password = #{password.inspect}"
person = Person.find_by_email(email)
if person
ldb "Authentication successful: Got person with id #{person.id}"
@current_person_session = PersonSession.create(person)
else
ldb "Authentication failed"
@current_person_session = nil
end
return @current_person_session
end
end
我可以在日志中看到密码为零:只有电子邮件被传递到 authenticate_or_request_with_http_digest 块的内部。
我用这样的 curl 调用来测试它:
curl --digest --user fakename@madeup.xyz:apass "http://localhost:3000/reports.xml"
我希望“fakename@madeup.xyz”和“apass”能够传递到块的内部。一旦我有了密码,我就可以使用电子邮件和密码的组合以正常方式查找(或不查找)用户。有谁知道我也可以访问密码吗?
感谢任何建议 - 最大
编辑 - 在进一步的谷歌搜索中,我认为我使用这种方法是错误的:我应该只返回密码或加密密码。但是,我如何将它与作为 http_digest 用户名的一部分传递的密码进行比较?