2011-09-13 19 views
23

के साथ POST/PUT पैरामीटर के बजाय अनुरोध हेडर से auth_token का उपयोग करके मुझे रेलवे 3.1 एपीआई में टोकन आधारित प्रमाणीकरण का उपयोग सबसे हाल के संस्करण के संयोजन के साथ करने की आवश्यकता है। अभी तक कोई समस्या नहीं है।रेल 3/devise

अब मैं अपने संलग्न नहीं करना चाहते हैं:। क्लाइंट की तरफ पोस्ट/PUT मापदंडों के auth_token लेकिन HTTP_X_MYAPP_AUTH_TOKEN "की तरह एक अनुरोध हेडर के रूप में इस टोकन भेजने

मुझे लगता है कि का इस्तेमाल करके उनकी एक टोकन की तुलना में से वसीयत को समझाने कर सकते हैं मापदंडों से? यह संभव

दोनों को लागू करने की है, ताकि मेरी API उपयोगकर्ताओं के अनुरोध हेडर या पोस्ट/PUT पैरामीटर के माध्यम से टोकन भेज सकते है? सादर। फेलिक्स

उत्तर

37

मैं एक ही जरूरत थी और इस समाधान के साथ आया था :

class YourController < ApplicationController 
    prepend_before_filter :get_api_key 
    before_filter :authenticate_user! 

    private 
    def get_api_key 
    if api_key = params[:api_key].blank? && request.headers["X-API-KEY"] 
     params[:api_key] = api_key 
    end 
    end 
end 

नोट मेरे पास मेरी रचना Devise.token_authentication_keyapi_key पर सेट है।

config.token_authentication_key = :api_key 
+0

अरे क्रिस, अच्छा समाधान, उस तरह। मैंने इस बीच तैयार करने के लिए अपना खुद का पैच बनाया, यह भी काम करता है। भविष्य में एक ही समस्या के दौरान आने वाले सभी के लिए आपका समाधान एक अच्छा फिट प्रतीत होता है। – GeorgieF

+2

हम्म मेरे लिए काम नहीं करता है: -/ '' get_api_key''' '' 'प्रमाणीकरण_यूसर 'से पहले सही तरीके से निष्पादित किया गया है, लेकिन दुख की बात है कि इस समय तक वार्डन रैक मिडलवेयर ने अपने आप पर पैरा को पहले ही पार्स कर लिया है और पैराम की प्रति जो नोटिस नहीं होगी: api_key आइटम। –

+1

अच्छा विचार है, लेकिन मुझे लगता है कि मुझे @WojtekKruszewski – elsurudo

4

मैं इस के लिए एक कस्टम "रणनीति" उपयोग कर रहा हूँ: क्वेरी स्ट्रिंग या बुनियादी HTTP प्रमाणीकरण के लिए हेडर के माध्यम से एक मानक प्रमाणीकरण टोकन पारित करने के लिए https://gist.github.com/4492569

4

यह वसीयत में संभव है, here देखते हैं। चश्मा से रूबी कोड HTTP_Authorization शीर्षक में टोकन पारित करने के लिए कर्ल के साथ कमांड लाइन से

header = "BasiC#{Base64.encode64("#{VALID_AUTHENTICATION_TOKEN}:X")}" 
get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => header 

परीक्षण है इस तरह जाना होगा:

echo "HUGP59gXsd7773a75Dvc:X" | base64 
=> SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo= 
curl --header "Authorization: Basic SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=" \ 
    http://localhost/users.xml 
1

वसीयत और चिंतन-token_authenticatable का उपयोग करना, मैं करने के लिए किया था http हेडर के माध्यम से टोकन पारित करने के लिए आदेश में मेरी config/initializers/devise.rb में इस सेट:

config.http_authenticatable = true