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

Man*_*uer 18 php yii yii2

在Yii2中,您可以使用\ yii\web\User类中的identityInterface对象访问当前用户的标识界面,使用类似这样的内容

 \Yii::$app->user->identity->id;
Run Code Online (Sandbox Code Playgroud)

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

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

Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);
Run Code Online (Sandbox Code Playgroud)

Man*_*uer 24

好吧,似乎这是故意删除,以避免"混乱".请参阅https://github.com/yiisoft/yii2/issues/167.所以通过直接调用会话类来实现此目的的唯一方法.

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

因为它现在直接存储在没有前缀的会话中,所以最好使用标识符对键进行命名,user.xxxx以避免与应用程序的不同点处的某些其他键集冲突.


Raf*_*ler 10

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

class Yiidentity extends ActiveRecord implements \yii\web\IdentityInterface{
       public $awesomeAttribute = "foo";
}
Run Code Online (Sandbox Code Playgroud)

如何使用:

Yii::$app->user->identity->awesomeAttribute;
Run Code Online (Sandbox Code Playgroud)


usu*_*ner 7

在Yii2 \ Yii :: $ app-> user-> identity中包含identityClass的实例.所以,如果你想要一些与identityClass相关的数据 - 就像使用identityClass的实例一样.