Yii2 - 如何在用户身份中设置动态身份验证超时?



在这里,我扩展了 Yii2User身份。

这是我的配置。

'user' => [
'identityClass' => appmodelsUserMaster::class,
'enableAutoLogin' => false,
'loginUrl' => ['/auth/login'],
'authTimeout' => 86400
],

在这里,我静态地定义了authTimout。但是,我想做的是我想从数据库中获取超时值并将其设置为authTimeout.

谢谢。

在处理请求之前,您可以使用事件来设置authTimeout

'as beforeRequest' => [
'class' => function (Event $event) {
/* @var $app yiiwebApplication */
$app = $event->sender;
$app->getUser()->authTimeout = (new Query())
->select('value')
->from('{{%settings}}')
->where('name = :name', ['name' => 'authTimeout'])
->scalar($app->getDb());
}
],

但可能更明确的方法是创建自定义组件并在init()中处理此问题。

class WebUser extends yiiwebUser {
public function init() {
parent::init();
$this->authTimeout = (new Query())
->select('value')
->from('{{%settings}}')
->where('name = :name', ['name' => 'authTimeout'])
->scalar();
}
}

然后在配置中使用新组件:

'components' => [
'user' => [
'class' => WebUser::class,
'identityClass' => appmodelsUserMaster::class,
'enableAutoLogin' => false,
'loginUrl' => ['/auth/login'],
],
// ...
],

可能不是最好的方法,但是如果您通过cookie使用autentication并且具有"enableAutoLogin"=>true,请转到vendor/yiisoft/yii2/web/User.php并在此方法的最后转到名为switchIdentity的方法,您应该查看修改持续时间。对我来说,它有效!!!

if ($this->enableAutoLogin && $duration > 0) 
{ 
//here change the value $duration example 900 sec(15 mins) 
$this->sendIdentityCookie($identity, $duration); 
}

最新更新