Столкнувшись с трудностями при активации регистрации пользователя по электронной почте в Yii
Я столкнулся с проблемой активации пользователя, нажав на ссылку активации, отправленную по электронной почте.
После нажатия на ссылку активации, т.е. http://www.example.com/devtest/index.php?r=user/check&activationcode=bc74873d0e3f684d3e6b99a36169a793ee688406 он перенаправляет на страницу входа без обновления базы данных.
Я думаю, что мой следующий код контроллера не работает для просмотра файла check.php, который находится в каталоге пользователя. Вот мой код
UserController.php:
public function actionCheck(){$activationcode = Yii::app()->request->getQuery('activationcode');
if(isset($activationcode))
{
$model = User::model()->findByAttributes(array('activationcode'=>$activationcode));
if($model !== null)
{
$model->status=1;
$model->save();Yii::app()->user->setFlash('check','Thank you for register with us');
$this->refresh();
}
}
$this->render('check',array('model'=>$model));
}
Посмотреть файл check.php:
<?php if(Yii::app()->user->hasFlash('check')): ?>
<div class="flash-success">
<?php echo Yii::app()->user->getFlash('check'); ?>
</div>
<?php endif; ?>
Я не уверен, как я могу обработать действие GET URL в UserController. Кроме того, я уже проверил, добавив слово "check" в accessRules, но затем браузер показывает, что страница не перенаправляет должным образом.
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','create','view','captcha'),
'users'=>array('*'),
),);}
Любая идея? Пожалуйста, дайте мне решение по моей проблеме.
С благодарностью, MRS
2 ответа
Я думаю, что вы не добавили действие Check в свой accessControl и разрешили всем пользователям. Не могли бы вы вставить свой код массива accessRules здесь?
public function filters() {
return array(
'accessControl',
);
}
public function accessRules() {
return array(
array('allow', // allow all users to perform
'actions'=>array('check'),
'users'=>array('*'),
),
Я думаю, что ваша модель пуста, поэтому вы не можете обновить базу данных.
Также я думаю, что ваши действия должны быть такими
public function actionCheck(){$activationcode = null){
if(!is_null($activationcode))
{
$model = User::model()->findByAttributes(array('activationcode'=>$activationcode));
if($model){
$model->status=1;
if($model->save())
Yii::app()->user->setFlash('check','Thank you for register with us');
$this->refresh();
}else{
Yii::app()->user->setFlash('check','Something is wrong!');
}
}
$this->render('check',array('model'=>$model));
}