2014-01-21 67 views
0

我有這段代碼每次創建新帖子時都會發送電子郵件。它通過特定鏈接向數據庫中的所有用戶發送電子郵件。問題是,用戶不能(不應該)被允許查看帖子,如果他們沒有登錄。我如何做到這一點,當我點擊電子郵件鏈接後,它會重定向到登錄頁面,然後將我重定向到電子郵件中的原始鏈接?登錄後將用戶轉到電子郵件中的鏈接

這是什麼方法?

+0

重定向代​​碼應該寫在您顯示帖子的那個頁面上,然後顯示帖子製作確定用戶已登錄。 –

回答

2
  1. if(Yii::app()->user->isGUest) 你可以用這個條件來檢查用戶是否已經驗證過了。
  2. $this->redirect('path/where you want to redirect');
    您可以使用此語句將用戶從任何控制器的任何操作或從任何地方重定向到所需的URL。
  3. Yii::app()->user->returnUrl 此聲明存儲您的命運網址。換句話說,假設你要去project/blog/create,但爲了訪問這個動作你需要被認證。所以如果你沒有通過認證,它會將你重定向到登錄頁面。如果你是成功登錄後,你可以去存儲在Yii::app()->user->returnUrl

如您所需的URL: -

public function actionCreateBlog() 
      { 
      if(!Yii::app()->user->isGUest) 
      { 
      // create the blog here 
      } 
      else 
      { 
      Yii::app()->user->loginRequired(); 
      } 

然後在你的登錄操作,你可以這樣做

public function actionLogin() 
    { 
     $model=new LoginForm; 

     // collect user input data 
     if(isset($_POST['LoginForm'])) 
     { 
      $model->attributes=$_POST['LoginForm']; 
      // validate user input and redirect to the previous page if valid 
      if($model->validate() && $model->login()) 
       $this->redirect(Yii::app()->user->returnUrl); 
     } 
     // display the login form 
     $this->render('login',array('model'=>$model)); 
    } 

} 
+0

因此,假設我在我的電子郵件中有一個鏈接,我點擊它並指向允許發佈/ view/id/186836,但由於它們未登錄,因此應將它們重定向到登錄索引。因此,如果我得到了正確的結果,我會將if(Yii:app() - > user-> isGuest()與actionView()放在控制器中,而不是將它鏈接到索引,並且登錄表單所在的位置,我將放置returnUrl。正確? –

+0

我的朋友:) –

+0

另外,我必須設置returnUrl如下所示:returnUrl('announcement/view/id/2ef2')是否正確?如果鏈接來自電子郵件,我將如何設置它,以便它適用於每個人的鏈接,因爲不同的用戶會有不同的ID? –

1

你可以簡單的方式做到這一點。

在您的控制器中,您有accessRules函數可爲該控制器的所有操作功能設置用戶角色。在這裏你可以限制用戶訪問。所以登錄後,yii會做重定向。

對於離,你有函數調用

public function actionView($id) 

針對這種觀點功能,需要在用戶privilage要設置登錄,您必須設置如下規則。

accessRules集,

'actions' => array('view'), 'users' => array('@'), // @ for logged in user 
相關問題