在Yii中通过电子邮件激活用户注册面临困难

在Yii中通过电子邮件激活用户注册面临困难,yii,yii-components,yii-events,Yii,Yii Components,Yii Events,我面临的问题,以激活用户点击激活链接,通过电子邮件发送 点击激活链接后,即它重定向到登录页面,而不更新数据库 我认为我下面的控制器代码不适用于位于用户目录上的视图文件check.php。 这是我的密码- UserController.php: public function actionCheck(){$activationcode = Yii::app()->request->getQuery('activationcode'); if(isset($activationcode)

我面临的问题,以激活用户点击激活链接,通过电子邮件发送


点击激活链接后,即它重定向到登录页面,而不更新数据库

我认为我下面的控制器代码不适用于位于用户目录上的视图文件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; ?>
有什么想法吗?请给我一个关于我的问题的解决方案

谢谢你,
MRS

我认为您的模型为空,因此无法更新数据库

我也认为你的行动应该是这样的

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));
}

我认为您的模型为空,所以无法更新数据库

我也认为你的行动应该是这样的

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));
}

我认为您没有将检查操作添加到您的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('*'),
                ),

我认为您没有将检查操作添加到您的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('*'),
                ),

我认为我的问题在于actionCheck功能。当我点击激活链接,然后在控制器actionCheck功能中,它无法正确处理获取URL。“重定向到登录页面而不更新数据库”。。。如果您的用户没有查看激活URL的权限,则会发生这种情况。为什么不暂时删除filter()和accessRules(),看看是否可以访问激活URL?您也可以尝试将“devtest”添加到AccessRules中。然后,浏览器上将显示以下文本“页面重定向不正确Firefox检测到服务器正在以一种永远无法完成的方式重定向对此地址的请求。此问题有时可能是由于禁用或拒绝接受Cookie造成的。“我认为我的问题在actionCheck功能中。当我单击激活链接,然后在controller actionCheck功能中,它无法正确处理获取URL。”重定向到登录页而不更新数据库" ... 如果您的用户没有查看激活URL的权限,则会发生这种情况。为什么不暂时删除filter()和accessRules(),看看是否可以访问激活URL?您也可以尝试将“devtest”添加到AccessRules中。然后,浏览器上将显示以下文本“页面重定向不正确Firefox检测到服务器正在以一种永远无法完成的方式重定向对此地址的请求。此问题有时可能是由于禁用或拒绝接受Cookie造成的。”