Ruby on rails rails使用\u http\u basic对\u或\u请求\u进行身份验证
在我的RoR应用程序中,我需要使用基本身份验证来保护页面,并且我希望每次用户链接到该页面时都会询问凭据 所以我在操作之前添加了一个过滤器,如下所示:Ruby on rails rails使用\u http\u basic对\u或\u请求\u进行身份验证,ruby-on-rails,authentication,basic-authentication,Ruby On Rails,Authentication,Basic Authentication,在我的RoR应用程序中,我需要使用基本身份验证来保护页面,并且我希望每次用户链接到该页面时都会询问凭据 所以我在操作之前添加了一个过滤器,如下所示: before_filter :request_confirm, :only => [:delete_device] 过滤方法为: def request_confirm user = User.find_by_id(session[:user_id]) authenticate_or_request_with_http_basi
before_filter :request_confirm, :only => [:delete_device]
过滤方法为:
def request_confirm
user = User.find_by_id(session[:user_id])
authenticate_or_request_with_http_basic do |nick, pass|
nick == user.nickname and pass == user.password
end
end
没关系,但这只是第一次,因为rails保存插入的数据,所以接下来会执行过滤器,但凭证不会询问
我不知道凭证保存在哪里。
. 这就是方法
如何使用\u http\u basic对\u或\u请求\u进行身份验证,以及http身份验证的一般工作方式<代码>使用\u http\u basic验证\u或\u请求\u可以改写为:“首先尝试验证,如果未验证,则请求验证”。此方法的源代码如下:
def authenticate_or_request_with_http_basic(realm = "Application", &login_procedure)
authenticate_with_http_basic(&login_procedure) || request_http_basic_authentication(realm)
end
那么会发生什么呢。当您第一次点击调用此操作的URL时,此authenticate\u或\u request\u with_http\u basic
返回http响应。浏览器理解这是一个身份验证请求,并向您显示一个对话框,用于输入用户名和密码,然后重新发送相同URL的请求,但将您的凭据包含在请求标题中。您的过滤器再次被点击,这一次方法authenticate\u或带有\u http\u basic的\u request\u
会看到请求中有身份验证头并成功授权您。并且浏览器会在以下每个请求中将这些身份验证头发送到此域(直到您关闭浏览器)
所以,如果您需要多次测试,您可以关闭并重新打开浏览器。我认为,仅使用这些方法不可能对每个请求请求进行身份验证和身份验证,因为当应用程序从浏览器获得带有身份验证头的请求时,它无法判断这是在身份验证请求之后立即发出的请求,还是之前保留的头
但这可以通过使用cookie或会话中存储的值来实现。非常感谢您的回答,但我不知道如何使用请求\u http\u基本\u身份验证(领域)。什么是领域?如何控制插入的昵称和密码?我想写这样的东西:用http_basic do | nick,pass | nick==user.昵称和pass==user.password结束,但使用请求http_basic |身份验证(realm)