2012-06-12 8 views
6

Derzeit ist devise konfiguriert Token-Authentifizierung über URL zu akzeptieren und curl funktioniert gutWie konfiguriert man das Authentifizierungs-Token im HTTP-Header?

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

Nun möchte Ich mag die TOKENVALUE über HTTP-Header zu übergeben statt URL, wie kann ich die TOKENVALUE von bekommen Config ersinnen entweder HTTP-Header oder URL? So dass sowohl die oben genannten und folgenden curl Anfragen funktionieren:

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

wie in this railscast gezeigt.

Antwort

1

Zuerst diese zu Ihrem gemfile hinzufügen https://github.com/stvp/devise_header_token dann können Sie eine Konfiguration für sie in der config hinzufügen/initializers/devise.rb

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

Devise Auth-Token-Authentifizierung über Grund Auth erlaubt. Wenn Sie die source aussehen werden Sie sehen:

Für Headern Sie die Standardauthentifizierung das Bestehen der Token als Benutzernamen und leeres Passwort verwenden können. Da einige Clients möglicherweise ein Passwort benötigen, können Sie "X" als Passwort übergeben und es wird einfach ignoriert.

1

Dinge geändert haben, seit diese Frage gestellt wurde, dass devise nicht mehr die Token-Authentifizierung Funktionalität eingebaut. Es wurde zu einem separaten Juwel, devise-token_authenticatable, extrahiert. Ich benutze dieses Juwel und wollte dasselbe machen wie die Person, die die Frage gestellt hat.

Ich fand heraus, ich dies in meiner config/initializers/devise.rb gesetzt hatte:

config.http_authenticatable = true

Ich versuchte es über curl und es funktionierte. In meinen RSpec-Tests konnte ich das Token in den HTTP-Header wie folgt setzen:

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

Hoffe, das hilft jemand da draußen!

Verwandte Themen