User Module Problema Attivazione Account

Salve,

avrei un problema con il modulo User.

ho seguito la guida per integrarlo anche con il modulo Rights.

Funziona tutto alla perfezione tranne quando un utente si registra.

All’attivazione dell’account, quando clicco sul link inviato via mail, ricevo questo errore:

PHP notice

Trying to get property of non-object

/var/www/MioSito/protected/modules/user/components/WebUser.php(40)




28 //    }

29 

30     protected function afterLogin($fromCookie)

31     {

32         parent::afterLogin($fromCookie);

33         $this->updateSession();

34     }

35 

36     public function updateSession() {

37         $user = Yii::app()->getModule('user')->user($this->id);

38         //$user = Yii::app()->getModule('user')->user();

39         $userAttributes = CMap::mergeArray(array(

40                                                 'email'=>$user->email,

41                                                 'username'=>$user->username,

42                                                 'create_at'=>$user->create_at,

43                                                 'lastvisit_at'=>$user->lastvisit_at,

44                                            ),$user->profile->getAttributes());

45         foreach ($userAttributes as $attrName=>$attrValue) {

46             $this->setState($attrName,$attrValue);

47         }

48     }

49 

50     public function model($id=0) {

51         return Yii::app()->getModule('user')->user($id);

52     }



poi se rieseguo riclicco sul link, ottengo il messagio di attivazione dell’account ed è tutto ok, però non solo loggato.

Qualcuno può aiutarmi??

grazie anticipatamente…

Che cosa succede se modifichi il metodo in :




36     public function updateSession() {

37         $user = Yii::app()->getModule('user')->user($this->id);

38         var_dump($user);

39         die;

 40    }



@sensorario grazie di aver risposto cosi velocemente :)

ricevo un bel

bool(false)

diamo per assunto che l’attivazione avviene correttamente, visto che avviene l’updateSession.

Controllato nel db? l’utente è attivato?

qual’è il controller che gestisce l’attivazione, controllato quello che fa?

ovviamente l’errore viene generato perchè non recupera l’utente.

prova a fare un echo di $this->id

grazie ancora per l’aiuto…

allora l’updateSession() me la richiama

protected/modules/user/models/User.php nella afterSave()




public function afterSave() {

        if (get_class(Yii::app())=='CWebApplication'&&Profile::$regMode==false) {

            Yii::app()->user->updateSession();

        }

        return parent::afterSave();

    }



ho controllato come mi hai chiesto e anche se mi da la notice php, praticamente la save() la fa perchè mi aggiorna lo status dell’utente ad attivato=1

Dopo ore ed ore sono riuscito a capire l’arcano…

praticamente nella protected/modules/user/models/User.php non ci deve essere l’updateSession e non riesco a capire il perchè ci fosse, perchè nella versione originale del modulo non c’è.

scusate ancora…

però mi sorge una domanda, il modulo User di default come funziona dopo che l’utente esegue il link per attivarlo? é loggato oppure no? perchè cosi non è loggato.

grazie.

a dirti la verità nei miei model User

non esiste proprio l’afterSave … quindi non so come mai tu abbia un problema del genere.

per quanto riguarda la tua richiesta…

In UserModule non dovrebbe esserci la possibilità di attivare quello che dici,

però guardando il codice in RegistrationController dovresti riuscire tranquillamente a modificare il tuo

ActivationController, per farlo loggare automaticamente

in particolare… una cosa del genere:




$find = User::model()->notsafe()->findByAttributes(array('email'=>$email));

\\..dopo i check per l'attivazione

$identity=new UserIdentity($find->email,$find->password);

$identity->authenticate();

Yii::app()->user->login($identity,0);

$this->redirect(Yii::app()->controller->module->returnUrl);