2012-03-10 39 views
6

Hello guys Tôi có mã này trong file main.php config:Yii ReturnURL chức năng

'components' => array(
    '[.........]', 
    'user'=>array(
     // enable cookie-based authentication 
     'allowAutoLogin'=>true, 
     'autoRenewCookie' => true, 
     'returnUrl' => 'http://stackoverflow.com', 
    ) 
); 

Vấn đề của tôi là id mà không chuyển hướng người dùng đến http://stackoverflow.com sau khi đăng nhập, bạn có thể xin vui lòng giúp tôi?

UserController.php:

public function actionLogin() 
{ 
    if (!Yii::app()->user->isGuest){ 
     $this->redirect('/user/index'); 
     return; 
    } 

    $model=new LoginForm; 

    // if it is ajax validation request 
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form') 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 

    // 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

Làm thế nào để chức năng đăng nhập của bạn nhìn? – Pentium10

+0

Tôi đã cập nhật. – Irakli

+0

Bạn có đang sử dụng trang đăng nhập sau khi chuyển hướng không? (ví dụ: nếu bạn không thể truy cập trang và nó chuyển hướng đến màn hình đăng nhập) Nếu bạn đang có, chuyển hướng đặt returnUrl thành giá trị của trang gốc ghi đè cài đặt cấu hình/chính. – Vervious

Trả lời

8

Tôi đã tìm được giải pháp cho vấn đề của mình. Tôi đã thêm dòng mã này trong login.php như vậy sau khi người sử dụng đăng nhập nó sẽ chuyển hướng về trang trước:

if (Yii::app()->request->urlReferrer != 'http://www.example.com/user/login' && 
    Yii::app()->request->urlReferrer != 'http://www.example.com/user/register') 
{ 
    Yii::app()->user->setReturnUrl(Yii::app()->request->urlReferrer); 
} 
+0

Tốt Hack ..! :-) –

+0

Nếu tôi muốn thêm url đăng nhập động thay vì url được mã hóa cứng, thì làm cách nào để tôi có thể nhận được url đăng nhập động này? –

+1

Bạn nên sử dụng '! ==' thay vì '! ='. – trejder

0

Yii ghi đè url lợi nhuận này được thiết lập trong file config.

Bạn có thể xác định url trả về này trong thông số hoặc bạn có thể tạo điều này thông qua hàm createUrl.

1

Hãy thử này để theo dõi những người cuối cùng url hợp lệ truy cập:

Thêm vào bạn cấu hình :

'preload' => array(
    // preloading 'loginReturnUrlTracker' component to track the current return url that users should be redirected to after login 
    'loginReturnUrlTracker' 
), 
'components' => array(
    'loginReturnUrlTracker' => array(
     'class' => 'application.components.LoginReturnUrlTracker', 
    ), 
    ... 
), 

Đặt tập tin này trong thành phần/LoginReturnUrlTracker.php:

<?php 

class LoginReturnUrlTracker extends CApplicationComponent 
{ 

    public function init() 
    { 
     parent::init(); 

     $action = Yii::app()->getUrlManager()->parseUrl(Yii::app()->getRequest()); 

     // Certain actions should not be returned to after login 
     if ($action == "site/error") { 
      return true; 
     } 
     if ($action == "site/logout") { 
      return true; 
     } 
     if ($action == "site/login") { 
      return true; 
     } 

     // Keep track of the most recently visited valid url 
     Yii::app()->user->returnUrl = Yii::app()->request->url; 

    } 

} 
Các vấn đề liên quan