Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails使用\u http\u basic对\u或\u请求\u进行身份验证_Ruby On Rails_Authentication_Basic Authentication - Fatal编程技术网

Ruby on rails rails使用\u http\u basic对\u或\u请求\u进行身份验证

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

在我的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保存插入的数据,所以接下来会执行过滤器,但凭证不会询问

我不知道凭证保存在哪里。
.

这就是方法
如何使用\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)