Hi everyone!
I want to use a full scale user management system, so I choose the UserGroups module to do so.
Now everything is working fine.
I can login like usual, but when I’m logged in, I want in some sensitive area for the user to re-enter his password to protect key data.
Now usually in "modules/userGroups/controllers/UserController.php"
...
public function actionLogin()
{
$model=new UserGroupsUser('login');
// collect user input data
if(isset($_POST['UserGroupsUser']))
{
$model->attributes=$_POST['UserGroupsUser'];
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login()) {
$this->redirect(Yii::app()->user->returnUrl);
}
}
...
where it uses its own "modules/userGroups/components/UserGroupsIdentity.php"
...
public function authenticate()
{
$model=UserGroupsUser::model()->findByAttributes(array('username' => $this->username));
if(!count($model))
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if((int)$model->status === UserGroupsUser::WAITING_ACTIVATION)
$this->errorCode=self::ERROR_USER_INACTIVE;
else if($model->password!==md5($this->password . $model->getSalt()))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
...
Everything works well [color="#FF0000"]ONLY FROM THE MODULE CONTROLLER!!![/color]
When I’m inside my application, when I use my code:
...
if (isset($_POST['formVal']['password']))
{
$UG_identity = new UserIdentity( Yii::app()->user->name, $_POST['formVal']['password'].$modelUG->getSalt());
if ($UG_identity->authenticate())
{
...
I get the exception:
[color="#FF0000"]Trying to get property of non-object[/color]
/var/www/xxxxxxxxx/protected/modules/userGroups/models/UserGroupsUser.php(542)
-Line(542) [color="#FF0000"] if (Yii::app()->controller->module->salt)[/color]
"/modules/userGroups/models/UserGroupsUser.php"
public function getSalt()
{
// TODO when stop supporting php 5.2 use dateTime
// turn the creation_date into the corresponding timestamp
list($date, $time) = explode(' ', $this->creation_date);
$date = explode('-', $date);
$time = explode(':', $time);
date_default_timezone_set('UTC');
$timestamp = mktime($time[0], $time[1], $time[2], $date[1], $date[2], $date[0]);
// create the salt
$salt = $this->username . $timestamp;
Yii::app()->toolbox->alert('BOOM');
// add the additional salt if it's provided
if (Yii::app()->controller->module->salt)
$salt .= Yii::app()->controller->module->salt;
return $salt;
}
Now I have the feeling it’s not working because i’m inside my siteController reaching for the property inside a module, but this line: [color="#0000FF"]Yii::app()->controller->module->salt[/color] ask for
Yii::app()->siteController->userGroups->salt which of course don’t exist.
[color="#0000FF"]Now how in the world can I use the function from one module from another controller?? [/color]
Thank you for your time