7

目前,devise配置为通过 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"'

这个 railscast所示。

4

5 回答 5

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'
于 2013-05-31T19:45:27.130 回答
1

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

我发现我必须在我的 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
    } 

希望这可以帮助那里的人!

于 2015-03-30T04:06:34.633 回答
1

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

于 2012-06-14T01:49:55.180 回答
1

Devise 允许通过基本身份验证进行身份验证令牌身份验证。如果您查看源代码,您会看到:

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

于 2013-06-12T18:13:52.683 回答
0

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

于 2013-06-25T13:25:42.273 回答