在这里,我扩展了Yii2的User恒等式。这是我的配置。
User
'user' => [ 'identityClass' => app\models\UserMaster::class, 'enableAutoLogin' => false, 'loginUrl' => ['/auth/login'], 'authTimeout' => 86400 ],
'user' => [
'identityClass' => app\models\UserMaster::class,
'enableAutoLogin' => false,
'loginUrl' => ['/auth/login'],
'authTimeout' => 86400
],
在这里,我已经静态定义了authTimout。但是,我想做的是,我想从数据库中获取超时值并在authTimeout中设置它。谢谢。
authTimout
authTimeout
iyfamqjs1#
在处理请求之前,您可以使用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()); }],
'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()中处理。
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(); }}
class WebUser extends \yii\web\User {
public function init() {
parent::init();
$this->authTimeout = (new Query())
->scalar();
然后在配置中使用新组件:
'components' => [ 'user' => [ 'class' => WebUser::class, 'identityClass' => app\models\UserMaster::class, 'enableAutoLogin' => false, 'loginUrl' => ['/auth/login'], ], // ...],
'components' => [
'class' => WebUser::class,
// ...
jrcvhitl2#
可能不是最好的方法,但如果你使用autentication通过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); }
if ($this->enableAutoLogin && $duration > 0)
{
//here change the value $duration example 900 sec(15 mins)
$this->sendIdentityCookie($identity, $duration);
2条答案
按热度按时间iyfamqjs1#
在处理请求之前,您可以使用event设置
authTimeout
:但更明确的方法可能是创建自定义组件并在
init()
中处理。然后在配置中使用新组件:
jrcvhitl2#
可能不是最好的方法,但如果你使用autentication通过cookie和有'enableAutoLogin'=〉true然后去vendor/yiisoft/yii2/web/User.php和去的方法调用switchIdentity在这个方法的最后你应该查看修改持续时间.对我来说它的作品!!!!