ruby-on-rails – rails authenticate_or_request_with_http_bas
在我的RoR应用程序中,我需要使用基本身份验证来保护页面,并且我希望每次用户链接到该页面时都会询问凭据.
所以我在操作之前添加了一个过滤器,如下所示: 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保存插入的数据,所以以下时间过滤器将被执行但凭证不会询问. 我不知道保存凭据的位置. 解决方法
这是方法authenticate_or_request_with_http_basic以及一般HTTP身份验证的工作方式. authenticate_or_request_with_http_basic可以重写为:“首先尝试进行身份验证,如果未经过身份验证,请求身份验证”.该方法的源代码如下:
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_or_request_with_http_basic将返回HTTP响应401 Unauthorized.浏览器理解这是一个身份验证请求,并显示一个输入用户名和密码的对话框,然后重新发送相同URL的请求,但将您的凭据包含在请求标头中.您再次点击过滤器,这次方法authenticate_or_request_with_http_basic看到请求中有身份验证标头并授权您成功.并且浏览器会在每个后续请求中将这些auth标头发送到此域(直到您关闭浏览器). 因此,如果您需要多次测试,可以关闭并重新打开浏览器.我相信只使用这些方法就不可能在每个请求上请求身份验证和身份验证,因为当应用程序从具有Auth标头的浏览器获取请求时,它无法在身份验证请求之后立即判断这是否是请求,或者这些是之前保留的标头. 但这可以通过使用cookie或存储在会话中的值以某种方式完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |