Changes
Title
unchanged
Module based login
Category
unchanged
Tutorials
Yii version
unchanged
Tags
unchanged
authentication, module
Content
changed
[...]
For each module, change its _UserIdentity_ authenticate() function to perform the appropriate validation.
**Step 2**
For each module, add the following lines to its main page. For example, for the Customer module, add to Customer/CustomerModule.php Add the following line
s to init():[...]
public function actionLogout() {
Yii::app()->user->logout(false);
$this->redirect(Yii::app()->getModule('admin')->user->loginUrl);
}
```customer')->user->loginUrl);
}
```
**Point sub-domain to module**
This tips from the forum URL [Subdomain to module](http://www.yiiframework.com/forum/index.php?/topic/7242-subdomain-and-modules/page__p__36698#entry36698 "Subdomain to module")
There is a feature called "Parameterizing Hostnames" ([described on this pages](http://www.yiiframework.com/doc/guide/1.1/en/topics.url "described on this pages")). add the following lines to main.php
```php
'components' => array(
...
'urlManager' => array(
'rules' => array(
'http://customer.example.com' => 'customer/default/index',
'http://customer.example.com/login' => 'customer/default/login',
),
),
...
),
```
So "customer/default/index" refers to the module "customer" with controller "default" and action "index".
**Update**
----------
**Redirect to respective module login, if user not logged in to a particular model**
add following code to customer module CustomerModule.php in beforeControllerAction
```php
if(Yii::app()->getModule('customer')->user->isGuest)
Yii::app()->getModule('customer')->user->setReturnUrl('customer/default/login');
```
do the same for other module
in SiteController's site/login method
```php
public function actionLogin() {
Yii::app()->request->redirect(Yii::app()->createUrl(Yii::app()->user->returnUrl));
}
```
(or)
**Update 2 (best method)**
----------
**Redirect to respective module login, if user not logged in to a particular model**
add following code to customer module CustomerModule.php
```php
public function beforeControllerAction($controller, $action) {
if (parent::beforeControllerAction($controller, $action)) {
// this method is called before any module controller action is performed
// you may place customized code here
$route = $controller->id . '/' . $action->id;
// echo $route;
$publicPages = array(
'default/login',
'default/error',
);
if (Yii::app()->user->isGuest && !in_array($route, $publicPages)){
Yii::app()->getModule('customer')->user->loginRequired();
}
else
return true;
}
else
return false;
}
```
do the same for other module
Thanks to ricardograna for sharing some configurations