2012-06-21 12 views
5

मेरे पास एक केक वेबसाइट है और इसमें दो अलग-अलग लॉग इन होने की आवश्यकता है, प्रत्येक के पास अपना स्वयं का लॉगिन फॉर्म होगा और अलग-अलग पेज देखेंगे, दो अलग-अलग टेबल होना अच्छा होगा क्योंकि इसमें कोई समानता नहीं है दो प्रकार के लोगकेकेपीएचपी 2 अलग लॉगिन टेबल

प्रत्येक लॉगिन फॉर्म का उपयोग केवल कुछ लोगों द्वारा किया जाएगा और वे कभी भी दूसरे रूप में लॉगिन नहीं करेंगे, और इसके विपरीत।

इसके अलावा, दो लॉगिन तालिकाओं के बीच एक रिश्ता है, जिसके लिए 2 टेबल की आवश्यकता है?

क्या यह संभव है?

+1

मैं क्या जरूरत है की तरह है, लेकिन केक के एक पुराने संस्करण है, शायद के लिए दिखता है कि @deizel यह देखेंगे :) – 472084

+0

'पहचान' को छोड़कर प्रमाणीकरण वस्तुओं को छोड़कर अवधारणा के समान प्रकार को' प्रमाणीकरण 'कहा जाता है (या विशेष रूप से' बेस प्रमाणीकरण 'पर' _findUser' विधि) कहा जाता है। – jeremyharris

+0

तो बस 'पहचान' को 'प्रमाणित' में बदलें? http://codepad.viper-7.com/1BX9fE – 472084

उत्तर

10

सबसे पहले, कुछ खाली कस्टम प्रमाणीकृत ऑब्जेक्ट्स जोड़ें। हम उसी तर्क का पुन: उपयोग करेंगे जो FormAuthenticate उपयोग करता है (यानी, उपयोगकर्ता के लिए डेटाबेस की जांच करने के लिए POST डेटा का उपयोग करता है), लेकिन ऑब्जेक्ट सेटिंग्स (बाद में) के भीतर मॉडल को बस बदलें।

एप्लिकेशन/नियंत्रक/घटक/प्रमाणीकरण/ModelOneAuthenticate.php

<?php 
App::uses('FormAuthenticate', 'Controller/Component/Auth'); 

class ModelOneAuthenticate extends FormAuthenticate { 
} 

एप्लिकेशन/नियंत्रक/घटक/प्रमाणीकरण/ModelTwoAuthenticate.php

<?php 
App::uses('FormAuthenticate', 'Controller/Component/Auth'); 

class ModelTwoAuthenticate extends FormAuthenticate { 
} 

तब उपयोग करने के लिए अपने अनुप्रयोग बता ये ऑब्जेक्ट प्रमाणीकृत करने के लिए, और बताएं कि किस मॉडल का उपयोग करना है। आप यहां फ़ील्ड को भी कस्टमाइज़ कर सकते हैं। अपने AppController में:

public $components = array(
    'Auth' => array(
     'authenticate' => array(
      'ModelOne' => array(
       'userModel' => 'ModelOne', 
       'fields' => array(
        'username' => 'my_custom_username_field', 
        'password' => 'some_password_field' 
       ) 
      ), 
      'ModelTwo' => array(
       'userModel' => 'ModelTwo' 
      ) 
     ) 
    ) 
); 

पहले प्रमाणीकरण वस्तु some_password_field में my_custom_username_field में एक उपयोगकर्ता नाम और पासवर्ड के लिए model_ones तालिका की जाँच करेगा, जबकि दूसरा एक model_twos जाँच मानक username और password फ़ील्ड का उपयोग होगा।

+0

इसके लिए धन्यवाद! मैंने अब तक सभी कोड और कोई त्रुटि नहीं की है, लेकिन जब मैं एक प्रतिबंधित पृष्ठ पर जाता हूं, तो जब मैं एजेंट/लॉगिन पर जाने के लिए कहता हूं तो यह उपयोगकर्ताओं/लॉगिन पर जाने की कोशिश करता है - क्या विचार? मेरे पास यह है: http://codepad.org/zvBeJFEX – 472084

+0

आपको loginRedirect संपत्ति सेट करने की आवश्यकता होगी: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html# AuthComponent :: $ loginRedirect – jeremyharris

+0

मैंने इसे इस तरह सेट किया है: http://codepad.org/zvBeJFEX - क्या मुझे इसे किसी भी तरह नव निर्मित ऑथ कक्षाओं में जोड़ने की आवश्यकता होगी? – 472084

1

जब उन्हें लॉगिन करना होता है तो समानता होती है: दोनों को इसे प्रमाण-पत्र, आमतौर पर उपयोगकर्ता नाम/ईमेल और पासवर्ड दर्ज करने की आवश्यकता होगी। इसलिए उपयोगकर्ता प्रकार के आधार पर उपयोगकर्ता तालिका और foo_profiles तालिका और bar_profiles तालिका भी काम करनी चाहिए।

यदि आप वास्तव में दो कुल अलग-अलग तालिकाओं और उनके लिए एमवीसी स्टैक के साथ जाना चाहते हैं, तो बस दो अलग-अलग नियंत्रकों FooUsers और BarUsers का उपयोग करें और प्रत्येक के अंदर एक अनुकूलित लॉगिन विधि बनाएं।

+0

2 उपयोगकर्ता प्रकारों में से प्रत्येक को केवल अपने एक रूप में लॉगिन करना होगा, कभी दूसरा नहीं। प्रत्येक फॉर्म के लिए एक अलग उपयोगकर्ता खाते की आवश्यकता होती है। क्या आप "अनुकूलित लॉगिन विधि बनाने" में सहायता के लिए किसी भी संसाधन के बारे में जानते हैं। धन्यवाद। – 472084

+0

हां, इस ट्यूटोरियल को देखें: http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html लॉगिन विधि में बस अपनी आवश्यकताओं को जो भी करें। – burzum

+0

मैं दो लॉगिन टेबल रखने में कोई मदद नहीं देख सकता, क्या मैं केवल उस कोड को ले जाउंगा जो इसे ऐप कंट्रोलर में अपने अलग नियंत्रक में डालने के लिए कहता है? – 472084

1

मैंने बेस प्रमाणीकरण से विस्तारित कस्टम प्रमाणीकरण घटकों को लिखकर इसे पहले किया है। जब तक वे प्रमाणीकृत() विधि को लागू करते हैं, तब तक आप जो भी अलग-अलग प्रकार के उपयोगकर्ता को चाहते हैं, वह करने में सक्षम होंगे।

अपने AppController में आप की तरह

public $components = array(
    "Session", 
    "Auth" => array(
     'authenticate'  => array("UserType1", "UserType2"), 
    ) 
); 

चेक बाहर बाकी के लिए cookbook कुछ कर रही द्वारा विभिन्न घटकों को पंजीकृत करने की जरूरत है।

+0

क्या आप कृपया इस्तेमाल किए गए कुछ कोड साझा करने में सक्षम होंगे? (कस्टम प्रमाणीकरण ऑब्जेक्ट के लिए) – 472084

+0

मैं टीबीएच नहीं करना चाहूंगा। हालांकि इसका सार यह है कि यदि आप प्रमाणीकृत उपयोगकर्ता से खुश हैं, तो आप एक सरणी वापस कर देते हैं जो तब $ auth-> उपयोगकर्ता में संग्रहीत हो जाता है। यदि आप खुश नहीं हैं तो आप इसके साथ 'झूठी' और केक सौदे वापस कर देते हैं। जो लिंक मैंने प्रदान किया है वह आपको आपके लिए प्रमाणीकरण नियंत्रक के प्रासंगिक अनुभाग में ले जाता है। –

+0

तो नई प्रमाणीकरण ऑब्जेक्ट के अंदर मुझे बस कहना होगा '(अगर लॉगिन और पासवर्ड मिलान तालिका 1) {$ row1 वापसी करें; } elseif (लॉगिन और पासवर्ड मिलान तालिका 2) {वापसी $ row2; } और {झूठी वापसी; } '? – 472084

2

यह करने के लिए सबसे आसान तरीका है बस हर लॉगिन प्रकार के लिए एक अलग सत्र कुंजी स्थापित करने के लिए है:

if ($loginTypeOne) { 
    $this->Auth->authenticate = array(
    'Form'=> array(
     'userModel'=> 'TypeOne', 
    ) 
    ); 
    AuthComponent::$sessionKey = 'Auth.TypeOne'; 
} else { 
    $this->Auth->authenticate = array(
    'Form'=> array(
     'userModel'=> 'TypeTwo', 
    ) 
    ); 
    AuthComponent::$sessionKey = 'Auth.TypeTwo'; 
} 
0
You can have a look on this. 
Define Model for both login member and then define table which you want to use for the user. 
set variable in model. 


class SearchedCategory extends AppModel { 
    var $name = 'SearchedCategory'; 
    Var useTable = 'give your table name here.'; 
    var $primaryKey = 'id'; 


}