目前,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所示。
答案 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)
Devise 2.2.4中添加了支持 https://github.com/plataformatec/devise/blob/master/CHANGELOG.rdoc#224
答案 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
}
希望这有助于那里的人!