登录后我无法在 Yii 中重定向用户
I am unable to redirect user in Yii after login
我是 Yii 的新手,所以我决定写一个简单的登录脚本来测试我到目前为止学到的东西。
由于某些原因,我的代码无法正常工作。
理想情况下,如果用户名和密码存在,它应该重定向到索引视图,如果不存在,它应该重定向到登录视图。
如果用户名和密码存在,它会按应有的方式重定向,并且还会显示正确的会话值,但如果用户名和密码不存在,我也会得到相同的结果。
知道我做错了什么吗?
这是我的控制器代码:
<?php
namespace app\controllers;
use app\models\Users;
use Yii;
class UsersController extends \yii\web\Controller
{
public function actionIndex()
{
$model = new users();
return $this->render('login', [
'model' => $model,
]);
}
public function actionLogin()
{
$model = new Users();
if ($model->load(Yii::$app->request->post())) {
// form inputs are valid, do something here
$request = Yii::$app->request;
$form_values = $request->post('Users');
//var_dump($form_values['email']); exit;
//echo $form_values['email'];
if($model !==NULL){
$model = $model->doLogin($form_values['email'],$form_values['password']);
$session = Yii::$app->session;
$session->setFlash('login', 'Login succesful.');
return $this->render('index', [
'model' => $model,
]);
}
elseif($model === NULL){
$session = Yii::$app->session;
$session->setFlash('login', 'Invalid Login.');
return $this->render('login', [
'model' => $model,
]);
}
}
}
}
这是因为你的条件没有意义,你的 else
分支是死代码。
首先你要初始化 $model
变量:
$model = new Users();
那你测试一下是不是null
:
if($model !==NULL){
这将 always return true
因为您已经初始化此变量以包含 Users
模型,所以它不可能null
。你可能应该有这样的东西:
class UsersController extends \yii\web\Controller {
public function actionIndex() {
$model = Users::findOne(Yii::$app->user->id);
return $this->render('index', [
'model' => $model,
]);
}
public function actionLogin() {
$model = new Users();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
Yii::$app->session->setFlash('login', 'Login successful.');
return $this->redirect(['index']);
}
return $this->render('login', [
'model' => $model,
]);
}
}
并在 Users::login()
方法中处理登录(验证用户名和密码)。请参阅 basic application template 中的示例。
我是 Yii 的新手,所以我决定写一个简单的登录脚本来测试我到目前为止学到的东西。
由于某些原因,我的代码无法正常工作。
理想情况下,如果用户名和密码存在,它应该重定向到索引视图,如果不存在,它应该重定向到登录视图。
如果用户名和密码存在,它会按应有的方式重定向,并且还会显示正确的会话值,但如果用户名和密码不存在,我也会得到相同的结果。
知道我做错了什么吗?
这是我的控制器代码:
<?php
namespace app\controllers;
use app\models\Users;
use Yii;
class UsersController extends \yii\web\Controller
{
public function actionIndex()
{
$model = new users();
return $this->render('login', [
'model' => $model,
]);
}
public function actionLogin()
{
$model = new Users();
if ($model->load(Yii::$app->request->post())) {
// form inputs are valid, do something here
$request = Yii::$app->request;
$form_values = $request->post('Users');
//var_dump($form_values['email']); exit;
//echo $form_values['email'];
if($model !==NULL){
$model = $model->doLogin($form_values['email'],$form_values['password']);
$session = Yii::$app->session;
$session->setFlash('login', 'Login succesful.');
return $this->render('index', [
'model' => $model,
]);
}
elseif($model === NULL){
$session = Yii::$app->session;
$session->setFlash('login', 'Invalid Login.');
return $this->render('login', [
'model' => $model,
]);
}
}
}
}
这是因为你的条件没有意义,你的 else
分支是死代码。
首先你要初始化 $model
变量:
$model = new Users();
那你测试一下是不是null
:
if($model !==NULL){
这将 always return true
因为您已经初始化此变量以包含 Users
模型,所以它不可能null
。你可能应该有这样的东西:
class UsersController extends \yii\web\Controller {
public function actionIndex() {
$model = Users::findOne(Yii::$app->user->id);
return $this->render('index', [
'model' => $model,
]);
}
public function actionLogin() {
$model = new Users();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
Yii::$app->session->setFlash('login', 'Login successful.');
return $this->redirect(['index']);
}
return $this->render('login', [
'model' => $model,
]);
}
}
并在 Users::login()
方法中处理登录(验证用户名和密码)。请参阅 basic application template 中的示例。