有人可以帮我解释一下这里发生了什么吗?
我觉得文档没有提到很多或描述正在发生的事情。它只是说像这样使用这种方法。
如果用户名和密码为真,将会发生什么,如果为false会发生什么?
class AdminController < ApplicationController
USERNAME, PASSWORD = "humbaba", "5baa61e4"
before_filter :authenticate
private
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == USERNAME &&
Digest::SHA1.hexdigest(password) == PASSWORD
end
end
end
感谢
答案 0 :(得分:2)
before_filter
方法可确保在所有请求之前运行私有方法authenticate
。
authenticate_or_request_with_http_basic
会弹出浏览器的“输入您的用户名和密码”框,并在这种情况下将其传递到阻止区,username
和password
。
如果块返回true
(如果用户名和密码匹配),请求将继续执行更具体的代码。如果块返回false
(用户名和密码不匹配),请求将被缩短,并返回具有正确HTTP状态代码的身份验证失败页面。在显示失败页面之前,浏览器可能会再次重试该请求。
答案 1 :(得分:1)
每个浏览器都内置了标准身份验证功能,称为“基本HTTP身份验证”。我确定您已经在网页上看到了一个通用的用户名/密码对话框(作为操作系统的一部分)。就是这样。
它的工作原理如下:
在你的before_filter
中,当你在任何地方访问任何控制器动作时,你只是告诉Rails执行上述所有歌曲和舞蹈。 Rails为您处理上述所有协议通信。
如果拒绝访问,Rails会发回403 Forbidden响应,浏览器有内置的方式来显示。
了解更多信息:http://en.wikipedia.org/wiki/Basic_access_authentication