Yii2 authKey в чем цель? [Дубликат]

0

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

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

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

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

'session' => [
    'class' => 'yii\web\DbSession',
    'sessionTable' => 'session',
],
Теги:
security
yii2
authorization

1 ответ

2

Отвечает уже в Yii2: почему ключ auth в классе 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) повторений, чтобы иметь возможность пометить еще. Публикация ответов на дураки здесь не одобряется.
  • 0
    извините за мой пост ответ на обман поведение, я новичок, я просто хочу показать, как yii2 работает с auth_key
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню