如何在 Yii2 中添加更多用户身份会话属性?

2022-08-30 20:30:49

在 Yii2 中,您可以通过从 \yii\web\User 类中使用 identityInterface 对象来访问当前用户的标识接口,如下所示

 \Yii::$app->user->identity->id;

有没有办法获取和设置其他参数(不扩展标识类)?

基本上相当于 Yii 1.x,以及 存储和检索会话信息的方法,如下所示getState()setState()CWebUser

Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);

答案 1

好吧,这似乎是故意删除的,以避免“混淆”。请参阅 https://github.com/yiisoft/yii2/issues/167。因此,执行此操作的唯一方法是直接调用会话类。

\Yii::$app->session->set('user.attribute',$value);
\Yii::$app->session->get('user.some_attribute');

由于它现在直接存储在会话中,因此最好使用标识符对密钥进行命名空间,例如避免与在应用程序的不同位置设置的其他密钥发生冲突。user.xxxx


答案 2

向用户添加属性的最佳方法是在用户类中创建公共属性。

class Yiidentity extends ActiveRecord implements \yii\web\IdentityInterface{
       public $awesomeAttribute = "foo";
}

如何使用:

Yii::$app->user->identity->awesomeAttribute;

推荐