2012-09-07 2 views
2

전자 메일로 보낸 활성화 링크를 클릭하여 사용자를 활성화하는 데 문제가 있습니다.Yii의 이메일로 사용자 등록을 활성화하는 데 어려움이 있음

활성화 링크 (예 : http://www.example.com/devtest/index.php?r=user/check&activationcode=bc74873d0e3f684d3e6b99a36169a793ee688406)를 클릭하면 데이터베이스를 업데이트하지 않고 로그인 페이지로 리디렉션됩니다.

내 컨트롤러 코드가 사용자 디렉토리에있는 check.php 파일보기에서 작동하지 않는다고 생각합니다. 내가 URL 동작을 GET 처리 할 수있는 방법을 잘 모르겠습니다

<?php if(Yii::app()->user->hasFlash('check')): ?> 
<div class="flash-success"> 
    <?php echo Yii::app()->user->getFlash('check'); ?> 
</div> 
<?php endif; ?> 

:

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 : 은 여기 내 코드 -

UserController.php입니다 UserController에서. 또한, 이미 accessRules에 'check'라는 단어를 추가하여 테스트했지만 브라우저가 페이지 리디렉션을 올바르게 수행하지 못했습니다.

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

+0

내 문제는 actionCheck 기능에 있다고 생각합니다. 활성화 링크를 클릭하면 컨트롤러 actionCheck 함수에서 GET URL을 올바르게 처리 할 수 ​​없습니다. –

+0

"데이터베이스를 업데이트하지 않고 로그인 페이지로 리디렉션"... 사용자에게 활성화 URL을 볼 수있는 권한이없는 경우 발생합니다. 필터() 및 accessRules()를 일시적으로 제거하고 활성화 URL에 액세스 할 수 있는지 확인하십시오. AccessRules에 'devtest'를 추가 할 수도 있습니다. –

+0

은 다음 페이지 "브라우저에 다음과 같은 텍스트 쇼가 제대로 리디렉션되지 파이어 폭스는 서버 방식으로이 주소에 대한 요청을 리디렉션되는 것을 감지하는 것이다 결코 완료. 쿠키를 사용 중지하거나 거부함으로써이 문제가 발생할 수 있습니다. " –

답변

0

내가 모델이 null이라고 생각, 그래서 당신은 데이터베이스를 업데이트 할 수 없습니다.

또한 나는 당신의 행동은 당신이 당신의 위해 accessControl에 확인 작업을 추가하고 모든 사용자를 허용하지 않은 생각이

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

솔루션이 작동하지 않습니다. –

0

처럼해야한다고 생각합니다. accessRules 배열 코드를 여기에 붙여주십시오.

public function filters() { 
    return array(
      'accessControl', 
      ); 
} 

public function accessRules() { 
    return array(
     array('allow', // allow all users to perform 
      'actions'=>array('check'), 
       'users'=>array('*'), 
       ),