我一直在为用户创建动态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']
,并将此变量用于此功能。]
我无法找出问题所在。