@66demon666
Сетевой админ, АТС-админ

Как аутентифицировать пользователя в Yii2?

Здравствуйте. Пытаюсь перейти с микрофреймворков на полноценные, а именно Yii2 или Laravel, но с моей точки зрения, они оба почти одинаково непонятные. В Yii2 уже есть базовые таблицы с базовыми полями для регистрации и авторизации и прочее прочее. Я же хочу использовать свои поля и свою логику аутентификации. Для начала хотя бы поля. Всё по инструкции.

Мой контроллер:
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\User;

class TestController extends Controller
{

  public function actionRegister() {
    $user=User::findOne(["id"=>1]);
    Yii:$app->user->login($user);
    if(Yii::$app->user->isGuest) {
        return "Вы гость";
    }
  }
}


И собственно модель User (ActiveRecord) реализующая интерфейс:
namespace app\models;

use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class User extends ActiveRecord implements IdentityInterface
{
  public static function tableName()
  {
      return 'users';
  }

    public static function findIdentity($id)
    {
        return static::findOne($id);
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
    //    return 1;
    }

    public function getId()
    {
        return $this->id;
    }

    public function getAuthKey()
    {
      //  return $this->authKey;
    }

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

Проблема заключается в том, на строчку с
Yii:$app->user->login($user);

в контроллере, Yii выдает "Call to a member function login() on null". Как я понял он таки не выдергивает пользователя.
5d7e93eec3584153721648.png

Что я делаю не так?

Added: бьюсь в истерике, буквально скопиррваный код с advanced шаблона и подправленый под мою таблицу не работает. Он авторизует, но все поля обьекта пользователя null. Может я как-то базу создаю не так?
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Попробуйте так:
$user = User::findOne(1);

А вообще загрузите advanced шаблон и посмотрите как там реализовано. Можно скопировать к себе и не выдумывать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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