📅  最后修改于: 2023-12-03 14:56:26.816000             🧑  作者: Mango
在 Web 应用程序中,用户登录是一个非常常见且重要的功能。Yii2 框架提供了一套强大而灵活的用户认证和授权机制,让开发者能够轻松地实现用户登录功能。
本文将介绍如何在 Yii2 中使用登录用户名作为用户凭据进行身份验证。
首先,我们需要创建一个数据库表来存储用户信息。在这个示例中,我们将创建一张名为 user
的表,包含以下字段:
- id (INTEGER PRIMARY KEY)
- username (VARCHAR(255))
- password_hash (VARCHAR(255))
- auth_key (VARCHAR(255))
接下来,我们需要创建一个继承自 yii\db\ActiveRecord
的 User 模型,用于操作 user
数据表。在模型中,我们需要定义表名、规定可访问的字段以及一些验证规则。
```php
namespace app\models;
use yii\db\ActiveRecord;
class User extends ActiveRecord
{
public static function tableName()
{
return 'user';
}
public function rules()
{
return [
[['username', 'password_hash', 'auth_key'], 'required'],
[['username', 'password_hash', 'auth_key'], 'string', 'max' => 255],
];
}
}
接下来,我们需要创建一个 LoginForm 模型,用于接收用户提交的登录表单数据。在模型中,我们需要定义表单字段以及一些验证规则。
namespace app\models;
use yii\base\Model;
class LoginForm extends Model
{
public $username;
public $password;
public function rules()
{
return [
[['username', 'password'], 'required'],
['password', 'validatePassword'],
];
}
public function validatePassword($attribute, $params)
{
$user = User::findOne(['username' => $this->username]);
if (!$user || !password_verify($this->password, $user->password_hash)) {
$this->addError($attribute, 'Invalid username or password.');
}
}
}
接下来,我们需要创建一个登录视图,用于展示登录表单并接收用户提交的数据。
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
$form = ActiveForm::begin(); ?>
<?= $form->field($model, 'username')->textInput() ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
最后,我们需要在控制器中处理用户提交的登录请求,并进行相应的身份验证。
namespace app\controllers;
use app\models\LoginForm;
use Yii;
use yii\web\Controller;
class SiteController extends Controller
{
public function actionLogin()
{
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
Yii::$app->user->login(User::findOne(['username' => $model->username]));
return $this->redirect(['index']);
}
return $this->render('login', [
'model' => $model,
]);
}
}
通过以上步骤,我们已经成功地实现了使用登录用户名进行身份验证的功能。Yii2 框架提供了很多强大的工具和功能,帮助开发者实现高效且安全的用户登录系统。以上代码片段和步骤都是基于 Yii2 框架,帮助开发者更好地理解和使用其中的功能。