在Ruby on Rails中,authenticate_with_http_basic做了什么?

时间:2011-02-24 06:07:47

标签: ruby-on-rails ruby-on-rails-3

Restful Authentication使用authenticate_with_http_basic,但网上搜索可以找到许多没有描述的页面。在官方http://api.rubyonrails.org/上,也可以找到它,除了没有描述,没有评论,没有规范。

它做什么?它似乎能够使用HTTP请求中的login_namepassword,然后可以将它们与login_name表中的encrypted_passwordusers进行比较......但是就是这样,为什么甚至没有单行描述呢?

2 个答案:

答案 0 :(得分:23)

此方法允许您实现基本的http身份验证(弹出一个小对话框询问用户名和密码的类型)。这通常是限制对开发站点或管理区域的访问的好方法。例如:

class AdminController < ApplicationController
  before_filter :authenticate

  def authenticate
    authenticate_or_request_with_http_basic('Administration') do |username, password|
      username == 'admin' && password == 'password'
    end
  end
end

此函数将请求基本的http身份验证用户名和密码,或者在输入之后,它将实际检查身份验证是否正确。换句话说,此功能可以调用authenticate_with_http_basic,也可以调用request_http_basic_authentication。您可以阅读更多相关信息,并查看更多示例here。你通常会调用authenticate_or_request_with_http_basic而不是调用authenticate_with_http_basic或request_http_basic_authentication,因为前一个函数将适用于后面的所有函数。

P.S:authenticate_with_http_basic不使用POST变量,它使用标头信息来获取用户名和密码(request.env ['HTTP_AUTHORIZATION'])。您可以查看有关授权功能here的更多信息。

答案 1 :(得分:5)

如果我可以在任何地方阅读它们,一些细节可以节省我的时间。

我摆弄它。 authenticate_with_http_basic只是从请求中读取basic-auth user / pass,并在请求中出现此类信息时执行内部块。 如果客户端未发送auth,则返回nil。否则,它返回块评估的任何内容。

因此,您可以使用返回值来决定是否执行request_http_basic_authentication,返回403禁止或呈现内容。

仅供参考,如果您从注册为before_action挂钩的方法运行此操作,我注意到该方法的返回值被忽略。如果方法rendered某事或redirected,则不执行该操作。如果方法不是renderredirect,则执行操作。

HTH(谈论Rails 5要明确)