2011-02-24 15 views
15

आराम प्रमाणीकरण authenticate_with_http_basic का उपयोग करता है, लेकिन नेट पर एक खोज के बिना कई विवरण मिल सकते हैं। आधिकारिक http://api.rubyonrails.org/ पर, यह भी पाया जा सकता है, सिवाय इसके कि कोई विवरण नहीं है, कोई टिप्पणी नहीं, कोई कल्पना नहीं है।रेल पर रूबी में, प्रमाणीकरण_with_http_basic क्या करता है?

यह क्या करता है? ऐसा लगता है कि login_name और password HTTP अनुरोध से उपयोग करने में सक्षम है और फिर users तालिका में login_name और encrypted_password से तुलना की जा सकती है ... लेकिन क्या यह मामला है, यहां तक ​​कि 1-पंक्ति विवरण भी नहीं है ?

उत्तर

18

यह विधि आपको मूल http प्रमाणीकरण को लागू करने की अनुमति देती है (जिस तरह से एक छोटा सा संवाद बॉक्स उपयोगकर्ता नाम और पासवर्ड मांगता है)। विकास स्थल या व्यवस्थापक क्षेत्र तक पहुंच सीमित करने के लिए यह आमतौर पर एक शानदार तरीका है। उदाहरण के लिए:

class AdminController < ApplicationController 
    before_filter :authenticate 

    def authenticate 
    authenticate_or_request_with_http_basic('Administration') do |username, password| 
     username == 'admin' && password == 'password' 
    end 
    end 
end 

इस समारोह या तो बुनियादी HTTP प्रमाणीकरण उपयोगकर्ता नाम और पासवर्ड के लिए एक अनुरोध कर देगा, या बाद में यह दर्ज किया गया है, यह वास्तव में अगर प्रमाणीकरण सही था की जाँच करेगा। दूसरे शब्दों में यह फ़ंक्शन या तो authenticate_with_http_basic पर कॉल करेगा या यह request_http_basic_authentication पर कॉल करेगा। आप इसके बारे में और अधिक पढ़ सकते हैं और अधिक उदाहरण here देख सकते हैं। आप आमतौर पर certicate_with_http_basic या request_http_basic_authentication को कॉल करने के बजाय certicate_or_request_with_http_basic को कॉल करेंगे, क्योंकि पूर्व फ़ंक्शन बाद के कार्यों के सभी उपयुक्त होगा।

पीएस: प्रमाणीकरण_with_http_basic POST चर का उपयोग नहीं करता है, यह उपयोगकर्ता नाम और पासवर्ड (request.env ['HTTP_AUTHORIZATION'] प्राप्त करने के लिए हेडर जानकारी का उपयोग करता है)। आप प्राधिकरण फ़ंक्शन here के बारे में अधिक जानकारी देख सकते हैं।

+0

पोस्ट चर 'username' और' password' से 'authenticate_with_http_basic' निकालने करता है और यह है कि यह क्या है? सबसे बुनियादी विवरण क्या है? –

+0

मैंने इसे अपनी पोस्ट में भी जोड़ा। संक्षेप में यह POST चर का उपयोग नहीं करता है, यह अनुरोध शीर्षलेख से request.env डेटा का उपयोग करता है। –

+0

HTTP शीर्षलेख में उपयोगकर्ता नाम और पासवर्ड किस स्थिति में है? लॉग इन फॉर्म ('/ session/new' या'/login') पोस्ट '/ session' पर पोस्ट करें और पोस्ट वैरिएबल इस तरह है: 'authenticity_token = TrtiGrt8CcDl9DiVbZLA6Yi24g% 2FQ6qazMtOgwlJqpjc% 3 डी और लॉगिन = foo और पासवर्ड = 123123 और remember_me = 1 और प्रतिबद्ध = लॉग + में मैंने सोचा कि उपयोगकर्ता लॉग इन आमतौर पर पोस्ट चर द्वारा किया जाता है? –

3

कुछ विवरण जो मुझे समय बचा सकता अगर मैं उन्हें कहीं भी पढ़ सकता।

मैंने इसके साथ झुकाया। authenticate_with_http_basic अनुरोध से मूल-लेखक उपयोगकर्ता/पास पढ़ता है और अनुरोध में ऐसी जानकारी मौजूद होने पर आंतरिक ब्लॉक निष्पादित करता है। यदि ग्राहक द्वारा कोई ऑथ नहीं भेजा जाता है, तो यह nil देता है। अन्यथा यह जो भी ब्लॉक मूल्यांकन करता है वह देता है।

तो आप यह निर्धारित करने के लिए वापसी मूल्य का उपयोग कर सकते हैं कि request_http_basic_authentication करना है, 403 प्रतिबंधित या सामग्री प्रस्तुत करें।

एफवाईआई, यदि आप इसे before_action हुक के रूप में पंजीकृत विधि से चला रहे हैं, तो मैंने देखा कि उस विधि का वापसी मूल्य अवहेलना है। यदि विधि rendered कुछ या redirected मामले में, कार्रवाई निष्पादित नहीं की जाती है। यदि विधि render या redirect नहीं है, तो कार्रवाई निष्पादित की जाती है।

HTH (रेल 5 के बारे में बात स्पष्ट होना)

संबंधित मुद्दे