Adobe
@Adobe
php developer

Как авторизоваться в Yii2 без участия БД?

Господа, пршу помощи.
Все перегуглил, один и тот же мануал гуляет и у нас и за бугром.
Не могу доехать до мысли, как авторизоваться просто принудительно.
Максимум до чего я дошел:

\Yii::$app->getUser()->login(User::findByRoot());

А в модели User:
public static function findByRoot()
  {
    $model = new User();
    $model->id = '1000';
    $model->username = 'vasya';
    $model->status = 10;
    return $model;
  }


В Yii::$app->getUser()->login(); просто голый объект User подсунуть не получается, Yii2 жалуется, что UserIdentity должен быть имплементирован.

Ошибок нет. login метод возвращает TRUE, и isGuest тоже показывает true

Пробовал другую реализацию findByRoot()
public static function findByRoot()
  {
    $arr = [
      'id' => 100,
      'username' => 'vasya',
      'status' => 10,
    ];
    return new static($arr);
  }

Результат тот же. Есть подозрения, что с полями не так что то.

Решил сделать полную копию всех полей,
$arr = [
      'id' => 100,
      'created_at' => 1444322024,
      'updated_at' => 1444322024,
      'username' => 'vasya',
      'auth_key' => 'aagsdghfgukfyrtweri',
      'email_confirm_token' => NULL,
      'password_hash' => 'aa2gsdg123hfgukfyrtweri',
      'password_reset_token' => NULL,
      'email' => 'some@email',
      'status' => 10,
    ];
    return new static($arr);


Yii::$app->user->identity все равно NULL
  • Вопрос задан
  • 1071 просмотр
Решения вопроса 1
Adobe
@Adobe Автор вопроса
php developer
Решил вопрос. Проблема была в том, что Yii2 проверяет повторно UserIdendity и делает запрос новый, надо в случае чего вернуть опять же фейковые данные с findIdentity метода
public static function findIdentity($id)
  {
    if($id == 1385)
      return self::findByRoot();
    else
      return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
  }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
usdglander
@usdglander
Yipee-ki-yay
Не очень хорошо понял вопрос, но предполагаю что нужно что то вроде фиксированного набора учеток прямо в коде и логин под ними. В basic-приложении такое сделано. Посмотри как там написано. Смысл в том, что на класс, который отвечает за авторизацию надо навешивать IdentityInterface.
class User implements IdentityInterface
{
...
}
Ответ написан
bitver
@bitver
Ваш пример это самое правильное что вы можете сделать, просто где-то опечатались/недописали.Yii::$ap->user->isGuest == false подразумевает, что есть Yii::$ap->user->identity, указывающий на модельку юзера.
А вашу проблему поможет решить стандартное решение: https://github.com/yiisoft/yii2-app-basic/blob/mas...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы