动态authTimeout:不覆盖Yii2中的先前authTimeout值

时间:2019-06-25 14:15:05

标签: php yii2

我一直在为用户创建动态authTimeout。这样用户可以设置其超时频率。

我遇到了Yii2 - How to set dynamic authTimeout in User Identity?

然后,我更改了 web.php 配置

'user' => [
  'identityClass' => 'app\models\Users',
  'loginUrl' => ['login'],
  'authTimeout' => $params['LOGIN_TIMEOUT_DURATION'], //default 3600
  'returnUrlParam' => 'return_url'
],

'user' => [
  'class' => app\models\WebUser::class,
  'identityClass' => 'app\models\Users',
  'loginUrl' => ['login'],
  'authTimeout' => $params['LOGIN_TIMEOUT_DURATION'], //default 3600
  'returnUrlParam' => 'return_url'
],

WebUser.php

<?php
namespace app\models;
use Yii;

class WebUser extends \yii\web\User {
    public function init() {
        if(isset(Yii::$app->params['authTimeout'])){
            if($this->authTimeout != Yii::$app->params['authTimeout']){
                $logout_time = Yii::$app->params['authTimeout'];
                $this->authTimeout = $logout_time;
            }
        }
    }    
}

然后,在“设置”类中使用WebUser.php

Settings.php

<?php
namespace app\models;

use Yii;
use yii\behaviors\TimestampBehavior;
use app\models\MyRecord;

class Settings extends MyRecord 
{

  public static function tableName(){
    return '{{%table_name}}';
  }

  private $c;
  public function __construct(){
    $this->c = new WebUser;
  }

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


}

因此,基本上,当任何用户设置超时频率时,我都将该值存储在params变量' authTimeout '中(例如 Yii :: $ app-> params ['authTimeout'] < / em>)。然后,在WebUser类中使用它来覆盖以前的 authTimeout 值。

但是,它不起作用,因为它采用了 web.php 'authTimeout' => $params['LOGIN_TIMEOUT_DURATION'],的初始authTimeout值。

我检查了Yii::$app->params['authTimeout']值是否即将出现在WebUser类中,但是不知何故它没有覆盖以前的值。

测试:

<?php
namespace app\models;
use Yii;

class WebUser extends \yii\web\User {
    public function init() {
        if(isset(Yii::$app->params['authTimeout'])){
            if($this->authTimeout != Yii::$app->params['authTimeout']){
                $logout_time = Yii::$app->params['authTimeout'];
                echo $logout_time; //printing 60 as I set it to 60 dynamically
                $this->authTimeout = $logout_time;
            }
        }
        print_r($this); die;
    }    
}

输出:

app\models\WebUser Object
(
    [identityClass] => app\models\Users
    [enableAutoLogin] => 
    [enableSession] => 1
    [loginUrl] => Array
        (
            [0] => login
        )

    [identityCookie] => Array
        (
            [name] => _identity
            [httpOnly] => 1
        )

    [authTimeout] => 3600
    [accessChecker] => 
    [absoluteAuthTimeout] => 
    [autoRenewCookie] => 1
    [idParam] => __id
    [authTimeoutParam] => __expire
    [absoluteAuthTimeoutParam] => __absoluteExpire
    [returnUrlParam] => return_url
    [acceptableRedirectTypes] => Array

而且,如果我直接在authTimeout变量中设置任何频率,它也可以工作。它注销了我的登录页面。

<?php
namespace app\modules\settings\models;
use Yii;

class WebUser extends \yii\web\User {
    public function init() {
        $this->authTimeout = 30;
    }    
}

[当用户从下拉菜单中选择超时时间时。我将该值存储在会话中,然后将其分配给变量Yii::$app->params['authTimeout'],并将此变量用于此功能。]

我无法找出问题所在。

0 个答案:

没有答案