paoloc
(Paolo)
March 19, 2013, 11:24am
1
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 }
paoloc
(Paolo)
March 19, 2013, 11:46am
3
@sensorario grazie di aver risposto cosi velocemente
ricevo un bel
bool(false)
st4nny
(St4nny)
March 19, 2013, 1:15pm
4
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
paoloc
(Paolo)
March 19, 2013, 2:12pm
5
st4nny:
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
paoloc
(Paolo)
March 19, 2013, 2:28pm
6
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.
st4nny
(St4nny)
March 20, 2013, 11:33am
7
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);