ruby-on-rails 在Ruby on Rails中,authenticate_with_http_basic是做什么的?

wvyml7n5  于 2023-04-13  发布在  Ruby
关注(0)|答案(2)|浏览(113)

Restful Authentication使用authenticate_with_http_basic,但是在网上搜索可以找到很多没有描述的页面。在官方的http://api.rubyonrails.org/上,也可以找到,除了没有描述,没有评论,没有规范。
它是做什么的?它似乎能够使用来自HTTP请求的login_namepassword,然后可以将它们与users表中的login_nameencrypted_password进行比较...但如果是这样的话,为什么甚至没有一行描述?

9rygscc1

9rygscc11#

此方法允许您实现基本的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_而不是调用authenticate_with_http_basic或request_http_basic_authentication,因为前一个函数将所有适当的后一个函数。
P.S:authenticate_with_http_basic不使用POST变量,它使用头信息来获取用户名和密码(request.env['HTTP_AUTHORIZATION'])。您可以查看有关授权函数here的更多信息。

y3bcpkx1

y3bcpkx12#

如果我能在任何地方读到的话,一些细节本可以节省我的时间。
authenticate_with_http_basic只是从请求中读取basic-auth user/pass,并在请求中存在此类信息时执行内部块。如果客户端没有发送auth,则返回nil。否则,它返回块评估的任何值。
因此,您可以使用返回值来决定是否执行request_http_basic_authentication,返回403 forbidden或渲染内容。
仅供参考,如果您从注册为before_action钩子的方法运行此操作,我注意到该方法的返回值被忽略。如果方法renderedredirected,则不会执行控制器操作。如果方法不执行renderredirect,则会执行控制器操作。
HTH(关于Rails 5的讨论需要明确)

相关问题