gpt4 book ai didi

ruby-on-rails - rails authenticate_or_request_with_http_basic

转载 作者:行者123 更新时间:2023-12-05 01:20:59 27 4
gpt4 key购买 nike

在我的 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

那么会发生什么。当你第一次点击调用这个 Action 的 URL 时,这个 authenticate_or_request_with_http_basic返回 HTTP 响应 401 Unauthorized。浏览器理解这是一个身份验证请求,并显示一个对话框以输入用户名和密码,然后重新发送对相同 URL 的请求,但将您的凭据包含在请求 header 中。你的过滤器又被打了,这次方法 authenticate_or_request_with_http_basic看到请求中有认证头,就授权你成功了。并且浏览器将在每个后续请求中向该域发送这些身份验证 header (直到您关闭浏览器)。

因此,如果您只需要对其进行多次测试,您可以关闭并重新打开浏览器。我相信仅使用这些方法不可能对每个请求都要求进行身份验证和身份验证,因为当应用程序从带有 Auth header 的浏览器获取请求时,它无法判断这是在身份验证请求后立即发出的请求,还是之前保留的 header 。

但这可以通过使用 cookie 或存储在 session 中的值以某种方式完成。

关于ruby-on-rails - rails authenticate_or_request_with_http_basic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12479251/

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