2016-05-18 2 views
0

私のアプリでは、セッションを使用してユーザーのデータ(名前、役割など)を保存しています。私はからyii2のデフォルトのUserクラスを使用しています。私はユーザーIDで必要なデータを取得しています。

問題は、ユーザーが以前のセッションをパスワードを入力せずに再開すると、セッションに保存されたデータが失われることです(remember meオプションを使用して)。これを解決するために、ユーザのデータを保存するためのコードをUservalidateAuthKey()メソッド内に保存して修正しようとしました.yy2がauthkeyをチェックしてセッションを再開すると呼び出されるためです。以下のように:あなたが見ることができるようにloginByCookie()後のアクション

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; 
} 

、私はMemberを見つけるために、ログインしたユーザーのIDを使用します。しかし、これを行うことで、私は "非オブジェクトのプロパティを取得しようとしている"という例外をYii::$app->user->idから取得しました。私はログインプロセスが完了した後にのみIDを取得できます。お手伝いをした後、私はloginByCookie()からUservendor\yiisoft\yii2\Webがログインに使用されていることを発見しました。ベンダーのコードを改ざんすることなくユーザーのデータを保存する方法はありますか? loginByCookie()の後で何らかのイベントが実行される可能性があります。

答えて

0
  1. 独自のUserモデルを作成し、\ののYii \ウェブ\ユーザーを拡張

    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', 
         ... 
        ] 
    ] 
    
0

共通/設定/ bootstrap.phpの中に

を以下のコードを入れて、ユーザーがクッキーでログインしている場合でも、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); 

     }); 
関連する問題