在这里,我扩展了 Yii2 的
User
Identity。
这是我的配置。
'user' => [
'identityClass' => app\models\UserMaster::class,
'enableAutoLogin' => false,
'loginUrl' => ['/auth/login'],
'authTimeout' => 86400
],
在这里,我静态定义了
authTimout
。但是,我想做的是我想从数据库中获取超时值并将其设置在authTimeout
.
谢谢。
您可以在处理请求之前使用事件设置
authTimeout
:
'as beforeRequest' => [
'class' => function (Event $event) {
/* @var $app \yii\web\Application */
$app = $event->sender;
$app->getUser()->authTimeout = (new Query())
->select('value')
->from('{{%settings}}')
->where('name = :name', ['name' => 'authTimeout'])
->scalar($app->getDb());
}
],
但可能更明确的方法是创建自定义组件并在
init()
中处理它。
class WebUser extends \yii\web\User {
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' => app\models\UserMaster::class,
'enableAutoLogin' => false,
'loginUrl' => ['/auth/login'],
],
// ...
],
可能不是最好的方法,但是如果你使用 cookie 的身份验证并且有 '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);
}