Yii 2-如何在用户标识中设置动态authTimeout?

jvidinwx  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(283)

在这里,我扩展了Yii2的User恒等式。
这是我的配置。

  1. 'user' => [
  2. 'identityClass' => app\models\UserMaster::class,
  3. 'enableAutoLogin' => false,
  4. 'loginUrl' => ['/auth/login'],
  5. 'authTimeout' => 86400
  6. ],

在这里,我已经静态定义了authTimout。但是,我想做的是,我想从数据库中获取超时值并在authTimeout中设置它。
谢谢。

iyfamqjs

iyfamqjs1#

在处理请求之前,您可以使用event设置authTimeout

  1. 'as beforeRequest' => [
  2. 'class' => function (Event $event) {
  3. /* @var $app \yii\web\Application */
  4. $app = $event->sender;
  5. $app->getUser()->authTimeout = (new Query())
  6. ->select('value')
  7. ->from('{{%settings}}')
  8. ->where('name = :name', ['name' => 'authTimeout'])
  9. ->scalar($app->getDb());
  10. }
  11. ],

但更明确的方法可能是创建自定义组件并在init()中处理。

  1. class WebUser extends \yii\web\User {
  2. public function init() {
  3. parent::init();
  4. $this->authTimeout = (new Query())
  5. ->select('value')
  6. ->from('{{%settings}}')
  7. ->where('name = :name', ['name' => 'authTimeout'])
  8. ->scalar();
  9. }
  10. }

然后在配置中使用新组件:

  1. 'components' => [
  2. 'user' => [
  3. 'class' => WebUser::class,
  4. 'identityClass' => app\models\UserMaster::class,
  5. 'enableAutoLogin' => false,
  6. 'loginUrl' => ['/auth/login'],
  7. ],
  8. // ...
  9. ],
展开查看全部
jrcvhitl

jrcvhitl2#

可能不是最好的方法,但如果你使用autentication通过cookie和有'enableAutoLogin'=〉true然后去vendor/yiisoft/yii2/web/User.php和去的方法调用switchIdentity在这个方法的最后你应该查看修改持续时间.对我来说它的作品!!!!

  1. if ($this->enableAutoLogin && $duration > 0)
  2. {
  3. //here change the value $duration example 900 sec(15 mins)
  4. $this->sendIdentityCookie($identity, $duration);
  5. }

相关问题