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

时间:2012-06-12 11:07:49

标签: ruby-on-rails ruby-on-rails-3 devise

目前,devise配置为通过URL接受令牌身份验证,curl效果很好

curl 'http://localhost/index.json?auth_token=TOKENVALUE'

现在我想通过HTTP标头而不是URL传递TOKENVALUE,我如何配置设计从 HTTP标头 URL获取TOKENVALUE?这样上述和后续卷曲请求都可以起作用:

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

this railscast所示。

5 个答案:

答案 0 :(得分:1)

似乎在设计中没有这样的配置。但其他人也有解决方案。请参阅Using auth_token from request headers instead from POST/PUT parameters with Rails 3 / devise

答案 1 :(得分:1)

首先将此添加到您的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'

答案 2 :(得分:1)

Devise允许通过Basic Auth进行身份验证令牌身份验证。如果您查看source,您会看到:

  

对于标头,您可以使用基本身份验证将令牌作为用户名传递   空白密码。由于某些客户可能需要密码,您可以通过" X"如   密码,它将被忽略。

答案 3 :(得分:1)

答案 4 :(得分:1)

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

我发现我必须在config / initializers / devise.rb中设置它:

config.http_authenticatable = true

我通过curl尝试了它并且它有效。在我的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
    } 

希望这有助于那里的人!