2016-07-20 7 views
6

मैं बल्कि एक गूढ़ सवाल पूछने के लिए पहले से माफ़ी मांगता हूं। हालांकि, मुझे बहुत सारी सामग्री के बावजूद इसे समझ में नहीं आया। यह बहुत अच्छा होगा अगर आप इस पर कुछ प्रकाश डाल सकते हैं।उपयोगकर्ता_लोडर से संबंधित Flask-Login का request_loader कैसे है?

फ्लास्क-लॉगिन में request_loader का उद्देश्य क्या है? यह user_loader सजावट के साथ कैसे बातचीत करता है?

यदि मैं टोकन आधारित प्रमाणीकरण प्रणाली का उपयोग कर रहा हूं (मैं अपने कोणीय जेएस फ्रंट एंड पर टोकन भेजने, वहां टोकन संग्रहीत करने और प्राधिकरण-टोकन हेडर में उस टोकन को भेजने पर योजना बना रहा हूं), क्या मुझे request_loader की आवश्यकता होगी या एक user_loader (जहां मैं लेख शीर्षलेख की जांच करता हूं और देखता हूं कि उपयोगकर्ता मौजूद है) पर्याप्त है?

+0

मैं एक ही बात –

+0

"मैं टोकन मेरी AngularJS फ़्रंट एंड प्राधिकरण-टोकन शीर्षक में उस टोकन भेजने वहाँ टोकन भंडारण और भेजने पर योजना बना रहा हूँ" करने में रुचि रखते मैं कर रहा में दिलचस्पी रहा हूँ वही चीज! क्या आप यह स्पष्ट करने के लिए (डी) request_loader का उपयोग कैसे कर सकते हैं? क्या कोणीय का $ http स्वचालित रूप से अन्य ब्राउज़र अनुरोधों के समान कुकीज़ का उपयोग करता है? क्या हमें "मेरे कोणीय जेएस फ्रंट एंड" भाग में टोकन भेजना है? मेरी चिंता यह है कि सत्र आईडी को किसी भिन्न शीर्षलेख या पैरामीटर में भेजा जा सकता है (यही कारण है कि मुझे request_loader की आवश्यकता हो सकती है) - लेकिन क्या लॉग-इन ब्राउज़र अभी भी स्वचालित रूप से इसे नहीं भेजेगा? –

+0

हाय जैच, देरी प्रतिक्रिया के लिए खेद है। जो मैं समझता हूं, उससे आपको वास्तव में उपयोगकर्ता और लोडर से अनुरोध करने की आवश्यकता नहीं होती है। एक उपयोगकर्ता लोडर बहुत आसान है, यह उपयोगकर्ता_आईडी को जांचता है जो सत्र के लिए जिम्मेदार है और जांचता है कि क्या उपयोगकर्ता user आपके उपयोगकर्ता डेटाबेस में मौजूद है और प्रमाणित करता है। एक अनुरोध लोडर अनुरोध प्राधिकरण की जांच करता है और वही प्रमाणीकरण करता है। इसलिए अधिकांश अनुप्रयोगों के लिए जिनके पास उपयोगकर्ता सत्र प्रबंधन है, आपको अनुरोध लोडर की आवश्यकता नहीं होगी। आपको किसी भी टोकन को नहीं भेजना होगा ... फ्लास्क और कोणीय जेएस स्वचालित रूप से user_loader – galeej

उत्तर

2

कुप्पी के लॉग इन documentation से:

कभी-कभी आप ऐसी हैडर मान या एक API कुंजी एक प्रश्न तर्क के रूप में पारित कर दिया का उपयोग कर के रूप में, कुकीज़ का उपयोग किए बिना उपयोगकर्ताओं के लिए प्रवेश करना चाहते हैं। इन मामलों में, आपको request_loader कॉलबैक का उपयोग करना चाहिए। यह कॉलबैक आपके उपयोगकर्ता_लोडर कॉलबैक जैसा व्यवहार करता है, सिवाय इसके कि यह उपयोगकर्ता_आईडी के बजाय फ्लास्क अनुरोध स्वीकार करता है।

तो, अपने प्रश्न का उत्तर देने के लिए, वे दोनों फ्लास्क-लॉगिन के लिए एक ही कार्य करते हैं। वे दोनों उपयोगकर्ता लोड करने के लिए उपयोग किया जाता है। request_loader, हालांकि, कस्टम लॉगिन के लिए उपयुक्त है।

यहाँ एक महान ट्यूटोरियल मैंने पाया कि request_loader का इस्तेमाल करता टोकन आधारित प्रमाणीकरण का लाभ लेने के (पोस्ट अपने ही नहीं है, मैं केवल लिंक साझा कर रहा) बताया गया है: http://gouthamanbalaraman.com/blog/minimal-flask-login-example.html

0

कुप्पी के लॉग इन के session_id के साथ उपयोगकर्ताओं को सत्यापित करने के लिए कोणीय के माध्यम से फ्रंटेंड अनुरोधों के लिए, आपको withCredentials कॉन्फ़िगरेशन ध्वज true पर सेट करना होगा।

यही है, अगर आप कोणीय के $http.post(url,data [,config]) या $http.get(url [,config]), सुनिश्चित करें कि config वस्तु को सही पर संपत्ति withCredentials सेट होता है बनाने के प्रयोग कर रहे हैं। इससे ब्राउजर को अपनी कुकीज़ का उपयोग उसी तरह से करने के लिए निर्देशित किया जाएगा जैसा कि यह पूर्ण-पृष्ठ पृष्ठ पर होगा।

उदाहरण के लिए,

$http.post('/api/login',{username:'myusername',password:'mypassword'},{withCredentials:true}) 

अगर आप बोतल प्रवेश का उपयोग कर रहे हैं और में लॉग इन किया डेटा आपकी साइट/एप्लिकेशन के /api/login मार्ग को {username:'myusername',password:'mypassword'}post करेंगे और बोतल पता चल जाएगा।

आप

$httpProvider.defaults.withCredentials=true 

कहीं स्थापित करने में अपने ऐप्लिकेशन में से सभी$http सेवा अनुरोध के लिए इस व्यवहार सेट कर सकते हैं। वर्तमान में, मैं अपने app.config ब्लॉक, जो मेरे लिए उपयुक्त लग रहा है में कोड की है कि लाइन है:

var myApp = angular.module('myApp'); 

myApp.config(function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    }); 

(के बाद से इस पोस्ट बोतल के बारे में है, लोगों कि यह कर सकते हैं इस तरह से कोणीय के माध्यम से प्रपत्र डेटा भेजने के लिए चाहते हो सकता है request.form में पाया गया है, जो एक समान समाधान है, fyi।)

+0

हाय जैच ... हाँ। जब आपके पास अनुरोध लोडर होगा तो यह काम करेगा। हालांकि, ध्यान दें कि उपयोगकर्ता नाम और पासवर्ड उन सभी लोगों के लिए दृश्यमान होगा जिनके पास कोडबेस तक पहुंच है (जब आप वेबसाइट होस्ट करते हैं ... यह मूल रूप से पूरी दुनिया है) ... तो इससे सुरक्षा जोखिम (संभवतः) हो सकता है। – galeej

+0

हाय @ गैलेज, क्या आप इस बारे में और अधिक कह सकते हैं? मेरा उदाहरण पूरी तरह से विचित्र है, मैं मानता हूं - मैंने लॉगिन के दौरान प्रमाण पत्र उत्तीर्ण दिखाया है, जो एकमात्र बार है जब यह प्रमाण-पत्र पास करने के लिए ज्यादा समझ नहीं लेता है; इस कॉन्फ़िगरेशन के साथ कोणीय द्वारा भेजे गए प्रमाण-पत्र केवल आपके session_id हैं, क्योंकि यह फ्लास्क-लॉगिन द्वारा कुकी-स्वरूपित है। तो वास्तव में, ईमेल और पासवर्ड मनमाने ढंग से $ http कॉल में नहीं भेजे जाते हैं। जो कुछ भी कहा जा रहा है, मैं अभी भी उत्सुक हूं कि आपको "कोडबेस" तक पहुंचने वाले किसी को भी संदेह है कि किसी भी उपयोगकर्ता की जानकारी तक पहुंच होगी और इसके अलावा, "पूरी दुनिया" क्यों होगी –

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