[英]Yii2 - How to set dynamic authTimeout in User Identity?
在這里,我擴展了Yii2的User
身份。
這是我的配置。
'user' => [
'identityClass' => app\models\UserMaster::class,
'enableAutoLogin' => false,
'loginUrl' => ['/auth/login'],
'authTimeout' => 86400
],
在這里,我已經靜態定義了authTimout
。 但是,我想要做的是我想從數據庫中獲取超時值並在authTimeout
設置它。
謝謝。
您可以在處理請求之前使用event設置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'],
],
// ...
],
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.