对于HTTP基本身份验证,我需要一个自定义表单,它包含类似site block
和site password
的字段,而不是username
和password
。我只想把文本从用户名改为站点块,从密码改为站点密码。
标准表格参考:https://httpbin.org/basic-auth/user/passwd
简单的答案是,您不能轻易地使用Rails内置的HttpAuthentication::Basic
类来实现这一点,或者至少没有一种简单的方法来配置要用于凭据的字段,就像使用devise
一样。它被硬编码为使用编码的用户名/密码字段来基于它们构建编码的授权哈希。
请参阅以下源代码/示例:https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/actionpack/lib/action_controller/metal/http_authentication.rb
提供的用户名/密码被编码到WWW-Authentication
标头中,然后用于生成基于散列用户/密码值的令牌。
基本身份验证就是基本身份验证。为了做一些不那么基本的事情,你必须自己动手。
您可以在控制器操作中捕获表单值,并执行以下操作:
user = params[:site_block]
password = params[:site_password]
然后基于这些变量执行自定义验证过程
这里有一个可行的例子,需要进行一些调整,但说明了这一点:https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html
很遗憾,您无法更改字段的名称。HTTP基本身份验证是HTTP规范的一部分,因此该功能被硬编码到浏览器中。