如何更改 HTTP 基本身份验证表单?

How to change HTTP Basic Authentication form?

对于 HTTP 基本身份验证,我需要一个自定义表单,其中包含 site blocksite password 等字段,而不是 usernamepassword。我只想将文本从用户名更改为站点块,将密码更改为站点密码。

标准格式参考:https://httpbin.org/basic-auth/user/passwd

简短的回答是,您不能轻易地使用 HttpAuthentication::Basic class 中内置的 Rails' 来执行此操作,或者至少没有直接的方法来配置用于凭据的字段,就像您使用 devise 之类的东西一样。硬编码使用编码的 username/password 字段基于它们构建编码的授权散列。

查看此来源code/example:https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/actionpack/lib/action_controller/metal/http_authentication.rb

所提供的 username/password 被编码为 WWW-Authentication header,然后用于生成基于散列 user/password 值的令牌。

基本授权就是基本授权。为了做一些不是那么基本的事情,你必须自己动手。

您可以在控制器操作中捕获表单值并执行以下操作:

user = params[:site_block]
password = params[:site_password]

...然后根据这些变量执行自定义身份验证过程

这是一个可行的示例,需要进行一些调整,但说明了这一点: https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html

很遗憾,您无法更改字段的名称。 HTTP Basic Auth 是 HTTP 规范的一部分,因此该功能被硬编码到浏览器中。