php - Yii2 - 如何在用户身份中设置动态 authTimeout?
问题描述
在这里,我扩展User
了 Yii2 的 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'],
],
// ...
],
推荐阅读
- regex - 在 Visual Studio 2017 中使用正则表达式查找字符串
- javascript - .click() 使用 .click() 嵌套在元素内的元素上
- monitoring - OpenTSDB 绘制内部统计信息
- java - Java AES 解密代码不起作用 - invalidException 1234444
- mingw-w64 - __MINGW64__ 未定义?或者我怎么知道要使用什么线程模型?
- c# - 检测连接的监视器的数量总是返回 1 或更多而不是 0
- marklogic - MarkLogic MLCP:是否可以将特定模块数据库设置为命令行选项
- xml - 使用 RequestHandler->renderAs XML 将 `htmlspecialchars()` 应用于 CDATA
- javascript - JavaScript:结合两个正则表达式来满足两者?
- c# - “安全地”存储(在客户端)令牌以供重用?