Автоматическое перенаправление на страницу входа после неактивности пользователя в yii2 - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь автоматически перенаправить пользователя после неактивности в yii2. Я добавил это в мою конфигурацию. В настоящее время, если пользователь остается неактивным в течение 30 секунд, а затем нажимает на любую ссылку в приложении, он будет перенаправлен на вход в систему.

Но он должен автоматически перенаправить на страницу входа после 30 секунд бездействия автоматически без нажмите на любые другие места в приложении.

'session' => [
        'timeout' => 30,
 ],
'user' => [
        'class'=>'yii\web\User',
        'identityClass' => 'app\models\User',
        'loginUrl'=>['site/login'],
        'enableAutoLogin' => false,                        
        'authTimeout' => 30,                   
    ],

Я пробовал это в приведенном выше коде, но это даст ошибку 404.

'loginUrl'=> Yii::$app->response->redirect(['site/login']),

Так как я должен перенаправить автоматически через 30 секунд, если неактивность .

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Нет такого прямого способа сделать это, но вы можете добиться этого следующим образом, пожалуйста, проверьте:

(1) Добавьте javascript код в views / site / main. php layout файл.

<script type="text/javascript">
    $(document).ready(function(){
        //call this function after 30 seconds or any time that you want to set.
        // as this code is in main.php layout so if user navigates to any screen this function sets again back to 30 seconds
        setTimeout(function() {
            // logout() method destroys all sessions
            <?php Yii::$app->user->logout(); ?>
            //and then just reload the page
            location.reload();
        }, 30000); // calling this function after 30 seconds
    });
</script>
0 голосов
/ 04 февраля 2020

Вы также должны добавить тайм-аут сеанса

'components' => [
...
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => false,
            'enableSession' => true,
            'authTimeout' => 1800, //30 minutes
     ],
        'session' => [
            // this is the name of the session cookie used for login on the frontend
            'class' => 'yii\web\Session',
            'name' => 'advanced-frontend',
            'timeout' => 1800,
        ],
...

Вы можете использовать поведения для действий.

 public function behaviors()
 {
     return [
         'access' => [
             'class' => AccessControl::className(),
             'only' => ['index', 'logout','view','create','update','delete'],
             'rules' => [
                 [
                     'actions' => ['index', 'logout','view','create','update','delete'],
                     'allow' => true,
                     'roles' => ['@'],
                 ],
             ],
         ],
     ];
 }

Таким образом, пользователь не вошел в систему будет перенаправить на логин URL Вы также можете установить URL входа

'session' => [
        'timeout' => 10,
      ],
'user' => [
      'identityClass' => 'common\models\User',
      'enableAutoLogin' => false,
      'authTimeout' => 10,
      'loginUrl' => 'admin/default/login' // set your login path here
     ],

ИЛИ Вы можете использовать метод beforeAction , чтобы проверить, вошел ли пользователь в систему или нет, и отправить пользователя на страницу входа.

 public function beforeAction($action){

        if (Yii::$app->user->isGuest){
            return $this->redirect(['site/login'])->send();  // login path
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...