Идентификация пользователя Yii2 после перенаправления страницы

Я работал над входом пользователя в yii2, но вместо использования активной записи есть другой сервер, обрабатывающий проверку имени пользователя и пароля пользователя. Итак, вот что я сделал для работы:

в LoginForm.php , я сделал некоторые изменения в validatePassword() который apiRest() – это метод, который я использовал для отправки запроса на удаленный сервер, отвечающий за проверку.

 if (!$this->hasErrors()) { $json = '{ "username": "' . $this->username . '", "password": "' . $this->password . '" }'; $response = $this->apiRest("POST", "104.130.126.68:3000/api/users/login", $json); $user = $this->getUser(); if(!$user || isset($response['error'])) { $this->addError($attribute, $response['error']['message']); } if(isset($response['data'])) { $user->id = $response['data']['userId']; $user->username = $this->username; $user->ttl = $response['data']['ttl']; $user->created = $response['data']['created']; $user->accessToken = $response['data']['id']; } } 

И в LoginForm.php/getUser() я также внес некоторые изменения:

 if ($this->_user === false) { $this->_user = User::createNewUser(); } return $this->_user; 

где в User.php меня есть:

 public static function createNewUser() { $user = [ 'id' => '', 'username' => '', 'ttl' => '', 'created' => '', 'accessToken' => '', ]; return new static($user); } 

Все кажется прекрасным, и я также могу распечатать идентификатор пользователя в SiteController.php/actionLogin() :

 if ($model->load(Yii::$app->request->post()) && $model->login()) { print('<pre>'); print_r(Yii::$app->user->identity->username); die(); return $this->redirect(['set/index']); } else { $this->layout = "plain"; return $this->render('login', [ 'model' => $model, ]); } использованием if ($model->load(Yii::$app->request->post()) && $model->login()) { print('<pre>'); print_r(Yii::$app->user->identity->username); die(); return $this->redirect(['set/index']); } else { $this->layout = "plain"; return $this->render('login', [ 'model' => $model, ]); } данных if ($model->load(Yii::$app->request->post()) && $model->login()) { print('<pre>'); print_r(Yii::$app->user->identity->username); die(); return $this->redirect(['set/index']); } else { $this->layout = "plain"; return $this->render('login', [ 'model' => $model, ]); } 

Однако проблема заключается в перенаправлении страницы, идентификация пользователя отсутствует; в Yii::$app->user->identity ничего нет. Я что-то пропустил? Пожалуйста, помогите мне.

Ну, проверка корректна, но вы делаете это

 if(isset($response['data'])) { $user->id = $response['data']['userId']; $user->username = $this->username; $user->ttl = $response['data']['ttl']; $user->created = $response['data']['created']; $user->accessToken = $response['data']['id']; } 

но вы никогда не ставите пользователя обратно в модель. Я считаю, что в конце

 $this->_user = $user; 

Вероятно, ваш логин выглядит

 /** * Logs in a user using the provided username and password. * * @return boolean whether the user is logged in successfully */ public function login() { if ($this->validate()) { return $this->getUser()->login($this->rememberMe ? 2592000 : 0); } else { return false; } } 

getUser снова не вернет ничего (он вернет пустого пользователя, которого вы создаете), поскольку вы никогда его не устанавливали.

Также, что говорят дека, я надеюсь, что это само собой разумеется :).

Убедитесь, что вы выполнили yii\web\IdentityInterface в User.php

 namespace app\models; use yii\web\IdentityInterface; class User implements IdentityInterface { } 

Если это так, убедитесь, что Yii::$app->user->enableSession имеет значение TRUE (которое должно быть по умолчанию ).