I have seen different implementation about this but in my particular code $this->refresh();
doesn't work or maybe I just do not know where to put it in my case. Can someone help me.
Here is the action in my controller.
public function actionIndex()
{
// if (!Yii::$app->user->isGuest) {
// return $this->goHome();
// }
$model = new LoginForm();
$model = new LoginForm();
if (($model->load(Yii::$app->request->post()) && $model->login()) || (!Yii::$app->user->isGuest)) {
$this->layout = 'userlayout';
// $this->refresh();
return $this->render('mainpage', [
'model' => $model,
//return $this->goBack();
]);
//$this->refresh();
}
return $this->render('index', [
'model' => $model,
]);
}
EDIT: I have edited my code based on the recommendation below, this is the code of the full ordeal.
public function actionIndex()
{
if (!Yii::$app->user->isGuest) {
//return $this->goHome();
$this->redirect('site/main',302);
// $this->layout = 'userlayout';
// return $this->render('mainpage');
}
// $model = new LoginForm();
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
// $this->layout = 'userlayout';
//return $this->goBack();
$this->redirect('site/main',302);//\Yii::$app->urlManager->createUrl("test/show") $this->redirect('/user/index',302);
//return $this->render('mainpage');
}
// if (($model->load(Yii::$app->request->post()) && $model->login()) || (!Yii::$app->user->isGuest)) {
// $this->layout = 'userlayout';
// // $this->refresh();
// return $this->render('mainpage', [
// 'model' => $model,
// //return $this->goBack();
// ]);
// //$this->refresh();
// }
return $this->render('index', [
'model' => $model,
]);
}
The logic I used for login in my Yii2 basic app is this:
public function actionLogin()
{
if (!Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
}
return $this->render('login', [
'model' => $model,
]);
}
And then in the LoginForm :
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Incorrect username or password.');
}
}
}
public function login()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
}
return false;
}
public function getUser()
{
if ($this->_user === false) {
$this->_user = User::findByEmail($this->email);
}
return $this->_user;
}
The only thing that is different is that I use User::findByEmail and not the default one where the information is not selected from db but instead hardcoded in the model.