2015-01-30 4 views
0

Мое пользовательское разрешение работает отлично без authKey. Я не понимаю, как его использовать. Но как-то более безопасно использовать его в документации. Я реализовал эти методы в классе User ActiveRecord.Yii2 authKey Какова цель?

public function generateAuthKey() 
{ 
    $this->auth_key = Yii::$app->security->generateRandomString(); 
} 

public function validateAuthKey($authKey) 
{ 
    return $this->authKey === $authKey; 
} 

Я даже сохраняю его в пользовательской таблице при создании пользователя. Но я знаю, что validateAuthKey никогда не используется. Я использую сеансы, и только PHPSESSID отправляется пользователю. Должен ли я установить authKey cookie вручную? В чем преимущества этого? Почему я не могу разрешать пользователю только PHPSESSID. Он уже хранится в таблице сеанса. Конфигурация сеанса:

'session' => [ 
    'class' => 'yii\web\DbSession', 
    'sessionTable' => 'session', 
], 

ответ

2

Там в ответ уже в Yii2: Why is the auth key in class User?

Смотрите следующий исходный код (vendor\yiisoft\yii2\web\User.php):

protected function loginByCookie() 
    { 
     $value = Yii::$app->getRequest()->getCookies()->getValue($this->identityCookie['name']); 
     if ($value === null) { 
      return; 
     } 

     $data = json_decode($value, true); 
     if (count($data) !== 3 || !isset($data[0], $data[1], $data[2])) { 
      return; 
     } 

     list ($id, $authKey, $duration) = $data; 
     /* @var $class IdentityInterface */ 
     $class = $this->identityClass; 
     $identity = $class::findIdentity($id); 
     if ($identity === null) { 
      return; 
     } elseif (!$identity instanceof IdentityInterface) { 
      throw new InvalidValueException("$class::findIdentity() must return an object implementing IdentityInterface."); 
     } 

     if ($identity->validateAuthKey($authKey)) { 
      if ($this->beforeLogin($identity, true, $duration)) { 
       $this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0); 
       $ip = Yii::$app->getRequest()->getUserIP(); 
       Yii::info("User '$id' logged in from $ip via cookie.", __METHOD__); 
       $this->afterLogin($identity, true, $duration); 
      } 
     } else { 
      Yii::warning("Invalid auth key attempted for user '$id': $authKey", __METHOD__); 
     } 
    } 
+2

Вы должны включать в себя какое-то объяснение того, как код отвечает на вопрос. Если вы считаете, что ответ на другой вопрос отвечает и здесь, вы должны пометить этот вопрос для закрытия как дубликат другого или ничего не делать, если не хватает (15) rep, чтобы иметь возможность отмечать пока. Проводя ответы на обман, нахмурился. – Palec

+0

Извините, что мой пост ответил на поведение обмана, я новичок, я просто хочу показать, как работает yii2 с auth_key. – Rambo

+0

Все в порядке, всем здесь нужно было узнать, как работает это сообщество. И мы все еще учимся. :-) Вот почему я сказал вам, что ожидается. Если вы хотите показать больше, чем исходный ответ, вы можете опубликовать лучший ответ на исходный вопрос и допустить, чтобы обман был закрыт. – Palec

Смежные вопросы