loginByCookie()

时间:2016-05-18 07:48:42

标签: yii2

在我的应用中,我使用会话来存储一些用户的数据(例如姓名,角色)。我在yii2上使用User上的默认common/models课程,并且我按用户ID获取了我需要的数据。

问题是数据如果用户在没有输入密码的情况下恢复他们之前的会话(使用记住我选项),我在会话中存储会丢失为了解决这个问题,我尝试修改并将用户数据保存在validateAuthKey() User中的public function validateAuthKey($authKey) { $user = Member::findOne(['account_id' => Yii::$app->user->id]); // Save on session Yii::$app->session->set('name', $user->first_name . ' ' . $user->last_name); Yii::$app->session->set('position', $user->position); // .. other data return true; } 方法中,以便在yii2检查authkey恢复会话时调用它。如:

Member

如您所见,我使用已登录用户的ID来查找Yii::$app->user->id。但通过这样做,我得到了#34;试图获得非对象的属性"来自loginByCookie()的例外情况。我只能在登录过程完成后获取id。在窥探后,我发现来自User vendor\yiisoft\yii2\Web的{​​{1}}用于登录。有没有办法保存用户的数据,而不会在供应商上篡改代码?也许在执行loginByCookie()之后会发生某种事件。

2 个答案:

答案 0 :(得分:0)

  1. 创建您自己的用户模型extends \ yii \ web \ User

    namespace frontend\components;
    class User extends \yii\web\User
    {
        protected function afterLogin($identity, $cookieBased, $duration)
        {
            ...Do something here...
            parent::afterLogin($identity, $cookieBased, $duration);
        }
    }
    
  2. 修改配置(main.php)。

    'components' => [
        'user' => [
            'class' => 'frontend\components\User',
            'identityClass' => 'common\models\User',
            ...
        ]
    ]
    

答案 1 :(得分:0)

将以下代码放在 common / config / bootstrap.php

即使用户通过cookie登录,也会调用EVENT_AFTER_LOGIN

    use yii\web\User;
    use yii\base\Event;

        Event::on(User::className(), User::EVENT_AFTER_LOGIN, function() {

           $user = Member::findOne(['account_id' => Yii::$app->user->id]);

            // Save on session
           Yii::$app->session->set('name', $user->first_name . ' ' . $user->last_name);
           Yii::$app->session->set('position', $user->position);

        });