如何配置设计以接受HTTP标头中的身份验证令牌



目前,设计配置为通过URL接受令牌身份验证,并且curl运行良好

curl 'http://localhost/index.json?auth_token=TOKENVALUE'
现在我想通过 HTTP 标头而不是 URL 传递 TOKENVALUE

,我如何配置设计以从 HTTP 标头 URL 获取 TOKENVALUE?这样上述和以下 curl 请求都可以工作:

curl 'http://localhost/index.json' -H 'Authorization: Token token="TOKENVALUE"'

如本轨道广播所示。

似乎在设计中没有这样的配置。但是其他人有一个解决方案。请参阅使用 Rails 3 中的请求标头中的 auth_token 而不是从 POST/PUT 参数/设计

首先将其添加到您的 gemfile https://github.com/stvp/devise_header_token 然后您可以在 config/initializers/devise.rb 中添加它的配置

# Configuration for :token_authenticatable
# Defines name of the authentication token params key
config.token_authentication_key = 'AUTH-TOKEN'

Devise 允许通过 Basic Auth 进行身份验证令牌。如果你查看源代码,你会看到这个:

对于标头,可以使用基本身份验证将令牌作为用户名传递,并且 空白密码。由于某些客户端可能需要密码,因此您可以将"X"传递为 密码,它将被简单地忽略。

自从提出这个问题以来,情况发生了变化,因为该设备不再具有内置的令牌身份验证功能。它被提取到一个单独的宝石中,设计token_authenticatable。我正在使用那个宝石,并希望与提出问题的人做同样的事情。

发现我必须在我的配置/初始值设定项/devise.rb 中设置它:

config.http_authenticatable = true

我通过卷曲尝试了一下,它奏效了。在我的 RSpec 测试中,我能够像这样将令牌放在 HTTP 标头中:

user = FactoryGirl.create(:user)
header = ActionController::HttpAuthentication::Token.encode_credentials(
  user.authentication_token)
get "/api/v1/your_url", 
    { },
    { 
      'Accept' => 'application/json',
      'Authorization' => header
    } 

希望这对那里的人有所帮助!

支持已添加到 Devise 2.2.4 中https://github.com/plataformatec/devise/blob/master/CHANGELOG.rdoc#224

最新更新