2016-04-06 6 views
9

"मूल" एप्लिकेशन टेम्पलेट का उपयोग करके, मुख्य साइट लॉगिन से अलग मॉड्यूल लॉगिन सेट करने का सही तरीका क्या है?Yii2 - मूल अनुप्रयोग टेम्पलेट में मॉड्यूल लॉगिन

उदाहरण के लिए मेरे पास एक "व्यवस्थापक" मॉड्यूल है जिसके लिए लॉगिन की आवश्यकता है। मुझे मुख्य साइट के लिए उपयोगकर्ता लॉगिन की भी आवश्यकता है।

मैंने किया है निम्नलिखित:

  1. बनाया admingii उपकरण का उपयोग मॉड्यूल
  2. बनाया modelsadmin मॉड्यूल फ़ोल्डर
  3. रखा LoginForm.php और User.php इस फ़ोल्डर के भीतर भीतर फ़ोल्डर (भी नाम स्थान घोषणाओं अद्यतन इन फ़ाइलों)
  4. जोड़ा गया AccessControl व्यवहार और लॉगिन/लॉगआउट क्रियापर
  5. अपडेट किया गया config\web.php इस प्रकार है:

    'modules' => [ 
        'admin' => [ 
         'class' => 'app\modules\admin\Module', 
        ], 
    ], 
    
  6. अपडेट किया गया app\modules\admin\Module.php इस प्रकार है:

    public function init() 
    { 
        parent::init(); 
    
        Yii::$app->set('user', [ 
         'class' => 'yii\web\User', 
         'identityClass' => 'app\modules\admin\models\User', 
         'enableAutoLogin' => true, 
         'loginUrl' => ['admin/default/login'], 
        ]); 
    
        Yii::$app->set('session', [ 
         'class' => 'yii\web\Session', 
         'name' => '_adminSessionId', 
        ]); 
    } 
    

समस्या मैं कर रहा हूँ है कि अगर मैं जब मैं एक व्यवस्थापक पृष्ठ तक पहुँचने का प्रयास लॉग इन नहीं किया गया है, यह लॉगिन फॉर्म दिखाता है (यह सही है)। हालांकि लॉग इन करने पर, यह मुझे वापस मुख्य साइट पर रीडायरेक्ट करता है। इसे मुझे उस व्यवस्थापक पृष्ठ पर रीडायरेक्ट करना चाहिए जिसे मैं एक्सेस करने का प्रयास कर रहा था।

if ($model->load(Yii::$app->request->post()) && $model->login()) 
    return $this->goBack(); 

कर इस तो मैं व्यवस्थापक मॉड्यूल के लिए और मुख्य साइट के लिए स्वतंत्र लॉगिन कर सकते हैं करने का सही तरीका क्या है:

DefaultController.php में, यह निम्नलिखित (डिफ़ॉल्ट कोड) है? मैं "उन्नत एप्लिकेशन टेम्पलेट" का उपयोग नहीं करना चाहता क्योंकि इसमें कुछ अनावश्यक जटिलता शामिल है।

+0

उन्नत आवेदन करने के लिए स्विच, यह इस लिए बनाया गया था और यह एक उन्नत एक के लिए एक बुनियादी आवेदन को बदलने के लिए काफी आसान है। आप बाद में वाईआई में अच्छे लोगों का शुक्रिया अदा करेंगे। –

उत्तर

0

goBack()homeUrl पर डिफ़ॉल्ट है यदि उपयोगकर्ता के लिए returnUrl सेट नहीं किया गया है।

क्यों न केवल पुनर्निर्देशित करें?

if ($model->load(Yii::$app->request->post()) && $model->login()) 
    return $this->redirect(['myadminmodule']); 
+0

यह हमेशा एक निश्चित पृष्ठ पर रीडायरेक्ट करेगा। इसे जिस भी पृष्ठ तक पहुंचने का प्रयास कर रहा था, उसे रीडायरेक्ट करने की आवश्यकता है (यदि वे पहले से लॉग इन नहीं थे)। – GSTAR

+0

यदि कोई उपयोगकर्ता व्यवस्थापक लॉगिन पृष्ठ पर उतरता है तो आप वापसी यूआरएल सेट कर सकते हैं। 'Yii :: $ app-> उपयोगकर्ता-> returnUrl = Yii :: $ app-> अनुरोध-> रेफरर;' मैं यह सुनिश्चित करने के लिए कुछ चेक जोड़ूंगा कि रेफरर बाहरी साइट पर रीडायरेक्ट नहीं करता है। – Alex

0

उपयोगकर्ता घटक आप एक returnUrl स्थापित करने के लिए अनुमति देता है, गेटर समझाया, This method reads the return URL from the session. It is usually used by the login action which may call this method to redirect the browser to where it goes after successful authentication.

अनुशंसित: डेटा संसाधित करने से पहले, Yii::$app->user->setReturnUrl(Url::current()); फोन करके returnUrl सेट (इस पृष्ठ उपयोगकर्ता था स्टोर करेगा सत्र में, इसके अलावा, आप इसे सत्र में पास करने से पहले Url::current() का उपयोग करके जीईटी पैरामीटर में हेरफेर कर सकते हैं), और ढांचे को अपना जादू करने दें।

सिफारिश नहीं: डेटा संसाधित करने के बाद, आप रेफ़रलकर्ता पर भरोसा कर सकते हैं (जो कुछ मामलों में काम नहीं करेगा) return Yii::$app->request->referrer ? $this->redirect(Yii::$app->request->referrer) : $this->goHome(); या बजाय goHome की जो मूल रूप से app- पर रीडायरेक्ट> homeUrl दौरान सेट किया जा सकता है कि निम्नलिखित के रूप में मॉड्यूल init, आप कह सकते $this->redirect('your/admin/index');

मैं, मॉड्यूल का आरंभीकरण के दौरान ['homeUrl' => 'your/admin/index'] की स्थापना के रूप में आप के रूप में अच्छी अन्य सुविधाओं के लिए यह आवश्यकता हो सकती है और Yii2 कुछ रीडायरेक्ट करने के लिए एक "वापस आने" के रूप में इसे इस्तेमाल करता है और साथ ही सलाह देते हैं।

0

config/web.php के पास जाओ और घटकों

'backendUrlManager'=>[ 
     'class' => 'yii\web\urlManager', 
     'enablePrettyUrl'=>true, 
     'showScriptName'=>false, 
     'baseUrl'=>'/admin', 
    ], 

DefaultController.php में में जोड़ने, यह निम्न (डिफ़ॉल्ट कोड) है:

if ($model->load(Yii::$app->request->post()) && $model->login()) 

वापसी Yii :: $ app-> GetResponse() -> रिडायरेक्ट (Yii :: $ app-> backendUrlManager-> baseurl);

0

व्यवस्थापक मॉड्यूल में नया नियंत्रक बनाने का सबसे अच्छा तरीका है, जिसमें लॉगिन होना चाहिए, लॉगआउट क्रियाएं होनी चाहिए। क्योंकि, भविष्य में आप कुछ अतिरिक्त तर्क जोड़ सकते हैं।

उस लॉगिन कार्रवाई में आप एक ही लॉगिनफॉर्म का उपयोग कर सकते हैं।

आप उस लॉगिन कार्रवाई में रीडायरेक्ट यूआरएल निर्दिष्ट कर सकते हैं।

व्यवस्थापक मॉड्यूल वर्ग कर सकते हैं इस तरह दिखता है:

namespace app\modules\admin; 

class Module extends \yii\base\Module 
{ 
    public $layout = 'main'; 

    public $defaultRoute = 'main/index'; 

    public function init() 
    { 
     parent::init(); 

     Yii::$app->errorHandler->errorAction = '/admin/main/error'; 
     Yii::$app->user->loginUrl = '/admin/main/login'; 
     ..... 

    } 
}