Yii2 - Как установить динамический authTimeout в личность пользователя? - PullRequest
0 голосов
/ 20 сентября 2018

Здесь я расширил User Идентичность Yii2.

Это моя конфигурация.

'user' => [
            'identityClass' => app\models\UserMaster::class,
            'enableAutoLogin' => false,
            'loginUrl' => ['/auth/login'],
            'authTimeout' => 86400
        ],

Здесь я определил authTimout статически.Но я хочу получить значение тайм-аута из базы данных и установить его в authTimeout.

Спасибо.

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете использовать событие, чтобы установить 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'],
    ],
    // ...
],
...