我有這段代碼每次創建新帖子時都會發送電子郵件。它通過特定鏈接向數據庫中的所有用戶發送電子郵件。問題是,用戶不能(不應該)被允許查看帖子,如果他們沒有登錄。我如何做到這一點,當我點擊電子郵件鏈接後,它會重定向到登錄頁面,然後將我重定向到電子郵件中的原始鏈接?登錄後將用戶轉到電子郵件中的鏈接
這是什麼方法?
我有這段代碼每次創建新帖子時都會發送電子郵件。它通過特定鏈接向數據庫中的所有用戶發送電子郵件。問題是,用戶不能(不應該)被允許查看帖子,如果他們沒有登錄。我如何做到這一點,當我點擊電子郵件鏈接後,它會重定向到登錄頁面,然後將我重定向到電子郵件中的原始鏈接?登錄後將用戶轉到電子郵件中的鏈接
這是什麼方法?
if(Yii::app()->user->isGUest)
你可以用這個條件來檢查用戶是否已經驗證過了。 $this->redirect('path/where you want to redirect');
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));
}
}
因此,假設我在我的電子郵件中有一個鏈接,我點擊它並指向允許發佈/ view/id/186836,但由於它們未登錄,因此應將它們重定向到登錄索引。因此,如果我得到了正確的結果,我會將if(Yii:app() - > user-> isGuest()與actionView()放在控制器中,而不是將它鏈接到索引,並且登錄表單所在的位置,我將放置returnUrl。正確? –
我的朋友:) –
另外,我必須設置returnUrl如下所示:returnUrl('announcement/view/id/2ef2')是否正確?如果鏈接來自電子郵件,我將如何設置它,以便它適用於每個人的鏈接,因爲不同的用戶會有不同的ID? –
這個答案解決了一般方法,基本上檢測到您沒有登錄,但節省傳遞到登錄頁面,以便它可以重定向你回到鏈接在一個變量的當前位置:
Redirecting to previous page after login? PHP
實現它使用警予,這個答案增加了更多背景
你可以簡單的方式做到這一點。
在您的控制器中,您有accessRules
函數可爲該控制器的所有操作功能設置用戶角色。在這裏你可以限制用戶訪問。所以登錄後,yii會做重定向。
對於離,你有函數調用
public function actionView($id)
針對這種觀點功能,需要在用戶privilage要設置登錄,您必須設置如下規則。
在accessRules
集,
'actions' => array('view'), 'users' => array('@'), // @ for logged in user
重定向代碼應該寫在您顯示帖子的那個頁面上,然後顯示帖子製作確定用戶已登錄。 –