目前,设计配置为通过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