Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii

Bagaimana untuk melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii

WBOY
WBOYasal
2023-07-28 11:40:451273semak imbas

Cara melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii

Yii ialah rangka kerja PHP yang berkuasa yang menyediakan pembangun dengan satu siri alatan dan komponen untuk memudahkan proses pembangunan. Salah satu fungsi penting ialah pengesahan pengguna, yang menentukan sama ada pengguna dilog masuk ke dalam sistem secara sah. Artikel ini akan memperkenalkan cara untuk melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii dan menyediakan contoh kod.

  1. Buat model pengesahan pengguna

Pertama, kita perlu mencipta model pengesahan pengguna untuk mengendalikan logik pengesahan log masuk pengguna. Dalam rangka kerja Yii, kita boleh menggunakan kelas yiiwebUser untuk melaksanakan fungsi pengesahan pengguna. Berikut ialah contoh kod model Pengguna:

namespace appmodels;

use yiidbActiveRecord;
use yiiwebIdentityInterface;

class User extends ActiveRecord implements IdentityInterface
{
    // 用户认证相关的属性和方法

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'user'; // 数据库中存储用户信息的表名
    }

    /**
     * @inheritdoc
     */
    public static function findIdentity($id)
    {
        return static::findOne($id); // 根据用户ID查找用户信息
    }

    /**
     * @inheritdoc
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        // 根据用户Token查找用户信息
        throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this->id; // 返回用户ID
    }

    /**
     * @inheritdoc
     */
    public function getAuthKey()
    {
        return $this->auth_key; // 返回用户认证密钥
    }

    /**
     * @inheritdoc
     */
    public function validateAuthKey($authKey)
    {
        return $this->auth_key === $authKey; // 验证用户认证密钥是否有效
    }

    /**
     * 根据用户名查找用户信息
     * @param $username
     * @return static
     */
    public static function findByUsername($username)
    {
        return static::findOne(['username' => $username]);
    }

    /**
     * 验证用户密码
     * @param $password
     * @return bool
     */
    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password, $this->password_hash);
    }
}

Dalam kod di atas, kami melaksanakan antara muka IdentityInterface dan mengatasi kaedah yang berkaitan. Kaedah ini digunakan terutamanya untuk mencari maklumat pengguna dan mengesahkan identiti pengguna berdasarkan ID pengguna, kunci pengesahan dan maklumat lain.

  1. Konfigurasikan komponen pengesahan pengguna

Seterusnya, kita perlu mengkonfigurasi komponen pengesahan pengguna supaya rangka kerja Yii boleh mengesahkan secara automatik apabila pengguna log masuk. Dalam rangka kerja Yii, komponen pengesahan pengguna ditakrifkan melalui fail konfigurasi. Buka fail config/web.php dan tambah kod berikut:

'components' => [
    // ...
    'user' => [
        'identityClass' => 'appmodelsUser',
        'enableAutoLogin' => true,
    ],
    // ...
],

Dalam kod di atas, kami menetapkan 'identityClass' kepada kelas Pengguna yang baru kami buat, dan 'enableAutoLogin' ditetapkan kepada benar untuk mendayakan fungsi log masuk automatik.

  1. Fungsi log masuk pengguna lengkap

Kini, kita boleh menggunakan fungsi pengesahan pengguna yang disediakan oleh Yii dalam pengawal atau paparan. Berikut ialah contoh kod fungsi log masuk pengguna mudah:

namespace appcontrollers;

use Yii;
use yiiwebController;
use appmodelsLoginForm;

class UserController extends Controller
{
    // ...

    public function actionLogin()
    {
        $model = new LoginForm();

        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            // 登录成功跳转到首页
            return $this->goHome();
        } else {
            // 显示登录表单
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

    // ...
}

Dalam kod di atas, kami mencipta kaedah actionLogin dalam pengawal UserController untuk mengendalikan permintaan log masuk pengguna. Dengan memanggil kaedah muat, kami boleh memuatkan data borang log masuk yang diserahkan oleh pengguna ke dalam model Log Masuk. Kemudian, pengesahan log masuk pengguna dilakukan dengan memanggil kaedah log masuk. Jika log masuk berjaya, kami mengubah hala pengguna ke halaman utama jika log masuk gagal, kami memaparkan paparan borang log masuk.

  1. Buat Model Borang Log Masuk

Akhir sekali, kita perlu mencipta model borang log masuk untuk mengendalikan pengesahan dan pemprosesan data borang log masuk pengguna. Berikut ialah contoh kod model Log Masuk yang mudah:

namespace appmodels;

use Yii;
use yiiaseModel;

class LoginForm extends Model
{
    public $username;
    public $password;
    public $rememberMe = true;

    private $_user = false;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['username', 'password'], 'required'],
            ['rememberMe', 'boolean'],
            ['password', 'validatePassword'],
        ];
    }

    /**
     * Validates the password.
     * This method serves as the inline validation for password.
     *
     * @param string $attribute the attribute currently being validated
     * @param array $params the additional name-value pairs given in the rule
     */
    public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();

            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, 'Incorrect username or password.');
            }
        }
    }

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

    /**
     * Finds user by [[username]]
     *
     * @return User|null
     */
    protected function getUser()
    {
        if ($this->_user === false) {
            $this->_user = User::findByUsername($this->username);
        }

        return $this->_user;
    }
}

Dalam kod di atas, kami telah mencipta model Log Masuk dan menentukan beberapa sifat dan kaedah. Kaedah peraturan mentakrifkan peraturan pengesahan borang log masuk, kaedah validatePassword digunakan untuk mengesahkan kata laluan yang dimasukkan oleh pengguna, kaedah log masuk digunakan untuk pemprosesan logik log masuk pengguna, dan kaedah getUser digunakan untuk mencari maklumat pengguna berdasarkan nama pengguna.

Setakat ini, kami telah berjaya melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii. Pengguna boleh log masuk dengan mengakses kaedah actionLogin dalam UserController Selepas log masuk berjaya, mereka akan melompat ke halaman yang ditentukan.

Ringkasan
Artikel ini memperkenalkan cara melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii. Dengan mencipta model pengesahan pengguna, mengkonfigurasi komponen pengesahan pengguna, melaksanakan fungsi log masuk dan mencipta model borang log masuk, kami boleh melaksanakan fungsi pengesahan pengguna dengan mudah dalam rangka kerja Yii. Sudah tentu, fungsi pengesahan pengguna juga boleh diperluaskan dan disesuaikan dalam kombinasi dengan kawalan kebenaran RBAC dan fungsi lain untuk memenuhi keperluan perniagaan tertentu.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi pengesahan pengguna dalam rangka kerja Yii. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn