📜  登录用户名 yii2 (1)

📅  最后修改于: 2023-12-03 14:56:26.816000             🧑  作者: Mango

登录用户名 Yii2

简介

在 Web 应用程序中,用户登录是一个非常常见且重要的功能。Yii2 框架提供了一套强大而灵活的用户认证和授权机制,让开发者能够轻松地实现用户登录功能。

本文将介绍如何在 Yii2 中使用登录用户名作为用户凭据进行身份验证。

步骤
1. 创建数据库表

首先,我们需要创建一个数据库表来存储用户信息。在这个示例中,我们将创建一张名为 user 的表,包含以下字段:

- id (INTEGER PRIMARY KEY)
- username (VARCHAR(255))
- password_hash (VARCHAR(255))
- auth_key (VARCHAR(255))
2. 创建 User 模型

接下来,我们需要创建一个继承自 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],
        ];
    }
}
3. 创建 LoginForm 模型

接下来,我们需要创建一个 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.');
        }
    }
}
4. 创建登录视图

接下来,我们需要创建一个登录视图,用于展示登录表单并接收用户提交的数据。

<?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(); ?>
5. 处理用户登录请求

最后,我们需要在控制器中处理用户提交的登录请求,并进行相应的身份验证。

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 框架,帮助开发者更好地理解和使用其中的功能。