2012-03-20 7 views
11

में ऑथ मैं केकेपीएचपी 2.0 के एकीकृत एथ घटक का उपयोग कर रहा हूं। मैं निम्न तालिकाओं है:

User belongsTo Group 
User hasMany Profiles 

जबकि में लॉग इन:

  • उपयोगकर्ता
  • समूह
  • प्रोफाइल

मेरे मॉडल संबंधों इस प्रकार हैंसाइट, मैंने देखा कि ऑथ सत्र में केवल उपयोगकर्ता तालिका जानकारी है, लेकिन मुझे लॉग इन उपयोगकर्ता के लिए समूह और प्रोफाइल टेबल की जानकारी चाहिए।

क्या एथ घटक के साथ ऐसा करने का कोई तरीका है?

उत्तर

6

AuthComponent के साथ ऐसा करने का कोई तरीका नहीं है क्योंकि यह सत्र कुंजी को संभालता है। हालांकि, आप इसे सत्र में ही सहेज सकते हैं। अपने AppController में अपने beforeFilter() में

function login() { 
    if ($this->Auth->login($this->data)) { 
     $this->User->id = $this->Auth->user('id'); 
     $this->User->contain(array('Profile', 'Group')); 
     $this->Session->write('User', $this->User->read()); 
    } 
} 

फिर, एक वर बचाने के नियंत्रकों को पाने के लिए के लिए:

यह करने के लिए एक ही रास्ता सत्र में जोड़ने के लिए जब उपयोगकर्ता में लॉग है

function beforeFilter() { 
    $this->activeUser = $this->Session->read('User'); 
} 

// and allow the views to have access to user data 
function beforeRender() { 
    $this->set('activeUser', $this->activeUser); 
} 

अद्यतन: केकेपीएचपी 2 के रूप में।2 (announced here), AuthComponent अब सत्र में अतिरिक्त जानकारी संग्रहीत करने के लिए 'कंटेन' कुंजी स्वीकार करता है।

+0

सत्र में उपयोगकर्ता को सेट करते समय चेतावनी का शब्द। उपयोगकर्ता डेटा अब प्रमाणीकृत होने के बाद भी सत्र डेटा सेट रह सकता है। आपको यह सुनिश्चित करना होगा कि साइन आउट पर सत्र डेटा हटा दिया गया है। आप इसे "उपयोगकर्ता" के बजाय सत्र को "Auth.User" में सहेजकर कर सकते हैं। केकपीएचपी 2.2 अपडेट का उल्लेख करने के लिए अपने उत्तर को अपडेट करने के लिए +1। – drmonkeyninja

1

जहां तक ​​मुझे पता है कि ऑथ घटक केवल आपके उपयोगकर्ता मॉडल से डेटा को कैश करता है। आप उस जानकारी का उपयोग कर सकते हैं, अन्य मॉडलों से वांछित डेटा पुनः प्राप्त करने के लिए अपने नियंत्रक में इस का उपयोग कर उदाहरण के लिए:

$group_data = $this->Group->findById($this->Auth->user('group_id')); 

या

$profile_data = $this->Profile->findByUserId($this->Auth->user('id')); 

लेकिन मुझे नहीं लगता कि आप से प्राप्त कर सकते हैं करते हैं औथ घटक सीधे, क्योंकि यह बॉक्स के संबंधित मॉडल डेटा को कैश नहीं करता है।

+0

मुझे साइट के माध्यम से सभी जानकारी की आवश्यकता है ताकि केवल AUTH से प्रयास किया जा सके। तो एक खोज क्वेरी लिखना नहीं चाहता .. :) – AnNaMaLaI

1

दो तरीके:

1) FormAuthenticate वर्ग (देखें/नियंत्रक/घटक/प्रमाणीकरण) का विस्तार या जो भी आप के लिए लॉग इन और _findUser() विधि ओवरराइड और इस अधिकृत वर्ग का उपयोग करने के प्रमाणीकरण घटक बताने के लिए इस्तेमाल करते हैं। इस पृष्ठ को देखें कि http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

2) मॉडल में एक विधि को लागू करें जो आपके इच्छित डेटा को लाएगा और इसे अपने नियंत्रक के लॉगिन विधि में कॉल करें और सत्र में डेटा लिखें। आईएमओ इस तरह की एक विधि के लिए आसान है क्योंकि कभी-कभी आपको सत्र डेटा को रीफ्रेश करने की आवश्यकता होती है।

आप एक विधि और एक मॉडल है कि आप डेटा दिखाएगी में कुछ कोड लिखने के लिए करना होगा:

अन्य जवाब पर अपनी टिप्पणी की वजह से

। केकेपीएचपी कोड के बिना आपके दिमाग और डेटाबेस को नहीं पढ़ सकता है। इससे कोई फर्क नहीं पड़ता कि आप किन तरीकों का उपयोग करने जा रहे हैं, आपको कोड लिखना होगा।

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