2012-03-11 13 views
8

का उपयोग कर कस्टम लॉगिन मैं सिम्फनी 2 के लिए अपेक्षाकृत सरल लॉगिन सिस्टम पर काम कर रहा हूं।एक तीसरा पैरामीटर

मेरे पास मूल बातें हैं और ठीक काम कर रही हैं।

यह थोड़ा सा विशेष बनाता है कि मुझे तीसरा मान (एक पारिस्थितिकी तंत्र मूल्य) प्रदान करने का एक तरीका चाहिए। मेरे डेटाबेस में उपयोगकर्ता नाम स्वयं पर अद्वितीय नहीं हैं, लेकिन पारिस्थितिक तंत्र मूल्य के साथ अद्वितीय जोड़े बनाते हैं।

पारिस्थितिक तंत्र मूल्य उस फ़ॉर्म द्वारा प्रदान किया जाता है जिसमें से वे लॉग इन करते हैं।

लॉगिन करने के दौरान मैं इस पारिस्थितिकी तंत्र का उपयोग कैसे कर सकता हूं?

उत्तर

6

How to load Security Users from the Database (the Entity Provider) पर कुकबुक ट्यूटोरियल पर एक नज़र डालें - विशेष रूप से Authenticating Someone with a Custom Entity Provider के बारे में भाग लें।

यह हिस्सा बताता है कि UserProviderInterface को किसी ई-मेल पते या उपयोगकर्ता नाम के माध्यम से लॉग इन करने की अनुमति देने के लिए कैसे बदलें/बनाना है। जाहिर है, यह वही नहीं है जो आप चाहते हैं, लेकिन - यह आपके तीसरे लॉगिन पैरामीटर के खिलाफ क्वेरी/सत्यापन करने के लिए कोड को संशोधित करने के लिए अपेक्षाकृत मामूली होना चाहिए।

आदर्श रूप से, आप संभावित रूप से अपना खुद का उपयोगकर्ता प्रदाता बनाना चाहते हैं और सौभाग्य से, इसके लिए केवल एक कुकबुक ट्यूटोरियल है: How to create a custom User Provider


अद्यतन: 3 लॉगिन विकल्प संभाला और (ऊपर बनाया) आपके कस्टम प्रदाताओं के लिए पारित करवाने के लिए, आप भी एक कस्टम प्रमाणन प्रदाता बनाने की आवश्यकता होगी। How to create a custom Authentication Provider पर (अभी तक एक और) कुकबुक आलेख देखें। यह आलेख प्रमाणीकरण के लिए अतिरिक्त अनुरोध शीर्षलेख पैरामीटर को संभालने के लिए तैयार किया गया है, लेकिन इस उदाहरण का उपयोग करके आप POST मानों के अनुरोध के लिए अनुरोध शीर्षलेखों को स्वैप करने में सक्षम होना चाहिए।

सिम्फनी 2 के साथ प्रमाणीकरण के बारे में समझने के लिए कुकबुक आलेख का उपयोग करें, लेकिन सिम्फनी 2 की उपयोगकर्ता नाम/पासवर्ड कार्यक्षमता का उपयोग करें (और विस्तार करें) और बस अपना तीसरा पैरामीटर शामिल करें। कुछ कक्षाओं देखने के लिए पर:

+0

मेरे पास पहले से ही लागू दोनों हैं। जिस चीज़ को मैं समझ नहीं पा रहा हूं वह है कि इसके खिलाफ सत्यापन करने के लिए मेरे भंडार में तीसरा मान कैसे प्राप्त करें। – samanime

+0

@ samanime: मैंने अपना जवाब अपडेट कर लिया है, मुझे आशा है कि यह कुछ सहायता प्रदान करेगी! यदि आप कुछ और नहीं करते हैं, तो 'UsernamePasswordFormAuthenticationListener' कक्षा' पर एक नज़र डालें और नकल करें, मैंने एक लिंक पोस्ट किया है। सौभाग्य! – leek

+0

अच्छा, यह बहुत काम था लेकिन मुझे अंततः यह मिला। मुझे अपना खुद का प्रमाणीकरण श्रोता, प्रमाणीकरण प्रदाता, टोकन और कारखाना लागू करना पड़ा। मैंने उनमें से अधिकांश के लिए उपयोगकर्ता नाम पासवर्ड संस्करण बढ़ाया है, इसलिए मुझे पहले से मौजूद सुरक्षा सामग्री को फिर से लागू करने की आवश्यकता नहीं थी। मुझे EntityRepository में दूसरा मान प्राप्त करने का कोई तरीका नहीं मिला, इसलिए मुझे वहां आवश्यक चीज़ों को प्राप्त करने के लिए पहले पैरामीटर में एक सरणी में पास करना पड़ा। आदर्श नहीं है, लेकिन यह काम करता है। – samanime

0

आप कस्टम Password Authenticator (> = Symfony 2.6) बना सकते हैं और वहाँ गुण सेट कर सकते हैं:

  1. createToken(): टोकन बनाएं (आप UsernamePasswordToken का उपयोग कर सकते हैं) और I को विशेषता सेट करें टी, आवश्यक डेटा $ अनुरोध से ले लो।
  2. प्रमाणीकृत टोकन(): यहां आप इस तीसरे चर ($ टोकन-> getAttribute()) के साथ कुछ करते हैं। यदि यह नीचे लोड लोडर उपयोगकर्ता नाम को प्रभावित करता है।

प्रमाणीकृत टोकन() में आपके पास UserProvider और loadUserByUsername है। मैंने जो किया वह my user provider (जो FOSUserBundle को बढ़ाता है और कहा गया विधि ओवरराइड करता है) का उपयोग करता था और उपयोगकर्ता नाम और अन्य आवश्यक डेटा के साथ एक सरणी पास करता था। LoadUserByUsername के अंदर क्या पारित किया गया है, यह जांचना न भूलें (उदा। यदि यह एक स्ट्रिंग है, तो पैरेंट :: loadUserByUsername पर कॉल करें)।

मुझे यकीन है कि loadUserByUsername के साथ यह चाल खराब है, लेकिन मुझे नहीं पता कि यह और कैसे किया जा सकता है।

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