Rumah pembangunan bahagian belakang tutorial php 在yii中新增一个用户验证的方法详解_PHP

在yii中新增一个用户验证的方法详解_PHP

Jun 01, 2016 pm 12:06 PM
yii Pengesahan pengguna

1.为什么要新增一个用户验证:
因为我要将网站后台和前台做在同一个yii的应用中.但是前台也包含有会员的管理中心.而这两个用户验证是完全不同的,所以需要两个不同登陆页面,要将用户信息保存在不同的cookie或session中.所以需要在一个应用中增加一个用户验证

2.yii的用户验证:
在自定义用户验证前,我们首先要弄清楚yii的验证和授权方式.
为了验证一个用户,我们需要定义一个有验证逻辑的验证类.在yii中这个类需要实现IUserIdentity接口,不同的类就可以实现不同的验证方 法.网站登陆一般需要验证的就是用户名和密码,yii提供了CUserIdentity类,这个类一般用于验证用户名和密码的类.继承后我们需要重写其中 的authenticate()方法来实现我们自己的验证方法.具体代码如下:
Php代码
复制代码 代码如下:
class UserIdentity extends CUserIdentity 

    private $_id; 
    public function authenticate() 
    { 
        $record=User::model()->findByAttributes(array('username'=>$this->username)); 
        if($record===null) 
            $this->errorCode=self::ERROR_USERNAME_INVALID; 
        else if($record->password!==md5($this->password)) 
            $this->errorCode=self::ERROR_PASSWORD_INVALID; 
        else
        { 
            $this->_id=$record->id; 
            $this->setState('title', $record->title); 
            $this->errorCode=self::ERROR_NONE; 
        } 
        return !$this->errorCode; 
    } 
    public function getId() 
    { 
        return $this->_id; 
    } 
}

在用户登陆时则调用如下代码:
Php代码
复制代码 代码如下:
// 使用提供的用户名和密码登录用户 
$identity=new UserIdentity($username,$password); 
if($identity->authenticate()) 
    Yii::app()->user->login($identity); 
else
    echo $identity->errorMessage;

用户退出时,则调用如下代码:
Php代码
复制代码 代码如下:
// 注销当前用户 
Yii::app()->user->logout();
 其中的user是yii的一个components.需要在protected/config/main.php中定义

Php代码
复制代码 代码如下:
'user'=>array( 
    // enable cookie-based authentication 
    'allowAutoLogin'=>true, 
        'loginUrl' => array('site/login'), 
),

这里我们没有指定user的类名.因为在yii中默认user为CWebUser类的实例.
我 们现在已经实现了用户的登陆验证和退出.但是现在无论是否登陆,用户都能访问所有的action,所以下一步我们要对用户访问进行授权.在yii里是通过 Access Control Filter即访问控制过滤器来实现用户授权的.我们看一下一个简单的带有访问控制的Controller:
Php代码
复制代码 代码如下:
class AdminDefaultController extends CController 
{  
    public function filters() 
        { 
            return array('accessControl'); 
        } 
        public function accessRules() 
        { 
            return array( 
                array( 
                    'allow', 
                    'users' => array('@'), 
                ), 
                array( 
                    'deny', 
                    'users' => array('*') 
                ), 
            ); 
        } 
}

我们在filters方法中设置具体的filter.我们可以看到在filters方法返回的array里有accessControl参数,在CController类中有一个filterAccessControl方法:
Php代码
复制代码 代码如下:
public function filterAccessControl($filterChain) 

    $filter=new CAccessControlFilter; 
    $filter->setRules($this->accessRules()); 
    $filter->filter($filterChain); 
}

在里面新建了一个CAccessControlFilter实例,并且在setRules时传入了accessRules()方法返回的参数.
$filter->filter($filterChain)则是继续调用其它filter.
而所有具体的授权规则则是定义在accessRules中:
Php代码
复制代码 代码如下:
public function accessRules() 
    { 
        return array( 
            array('deny', 
                'actions'=>array('create', 'edit'), 
                'users'=>array('?'), 
            ), 
            array('allow', 
                'actions'=>array('delete'), 
                'roles'=>array('admin'), 
            ), 
            array('deny', 
                'actions'=>array('delete'), 
                'users'=>array('*'), 
            ), 
        ); 
    }

具体规则参见yii的手册.
3.新增一个验证体系:
首先我们从CWebUser继承一个CAdminUser:
Php代码
复制代码 代码如下:
class CAdminWebUser extends CWebUser 

    public $loginUrl = array('admin/admin/login'); 
}

我们需要把他放置到components中
如果是全局应用则通过protected/config/main.php的components小节:
Php代码
复制代码 代码如下:
'user'=>array( 
    // enable cookie-based authentication 
        'class' => 'CAdminUser', 
    'allowAutoLogin'=>true, 
       'loginUrl' => array('site/login'), 
),

如果是在modules中则在模块类的init方法中添加如下代码:
Php代码
复制代码 代码如下:
$this->setComponents(array( 
       'adminUser' => array( 
                'class' => 'CAdminWebUser', 
                'allowAutoLogin' => false, 
        ) 
));

最后调用方式
Php代码
复制代码 代码如下:
//全局应用 
Yii::app()->getComponent('adminUser'); 
//在模块中 
Yii::app()->controller->module->getComponent('adminUser');

但仅仅这样还不够,我们还需要修改Controller的filter,我们需要自定义一个filter,来实现另一个用户的验证和授权
第一步自定义一个filter:
Php代码
复制代码 代码如下:
class CAdminAccessControlFilter extends CAccessControlFilter 

    protected function preFilter($filterChain) 
    { 
        $app=Yii::app(); 
        $request=$app->getRequest(); 
        $user = Yii::app()->controller->module->getComponent('adminUser'); 
        $verb=$request->getRequestType(); 
        $ip=$request->getUserHostAddress(); 

        foreach($this->getRules() as $rule) 
        { 
            if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed 
                break; 
            else if($allow            { 
                $this->accessDenied($user); 
                return false; 
            } 
        } 
        return true; 
    } 
}

再重写CController类的filterAccessController方法
Php代码
复制代码 代码如下:
public function filterAccessControl($filterChain) 

    $filter = new CAdminAccessControlFilter(); 
    $filter->setRules($this->accessRules()); 
    $filter->filter($filterChain); 

//在这里我们使用自定义的filter类替换了原来的filter

OK,到这里我们就可以在此Controller的accessRules()中指定adminUser的授权了
Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan rangka kerja PHP Yii untuk membangunkan sistem sandaran awan yang sangat tersedia Cara menggunakan rangka kerja PHP Yii untuk membangunkan sistem sandaran awan yang sangat tersedia Jun 27, 2023 am 09:04 AM

Dengan perkembangan berterusan teknologi pengkomputeran awan, sandaran data telah menjadi sesuatu yang mesti dilakukan oleh setiap perusahaan. Dalam konteks ini, amat penting untuk membangunkan sistem sandaran awan yang sangat tersedia. Rangka kerja PHP Yii ialah rangka kerja berkuasa yang boleh membantu pembangun membina aplikasi web berprestasi tinggi dengan cepat. Berikut akan memperkenalkan cara menggunakan rangka kerja Yii untuk membangunkan sistem sandaran awan yang sangat tersedia. Mereka bentuk model pangkalan data Dalam rangka kerja Yii, model pangkalan data adalah bahagian yang sangat penting. Kerana sistem sandaran data memerlukan banyak jadual dan hubungan

Yii2 vs Phalcon: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi pemaparan grafik? Yii2 vs Phalcon: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi pemaparan grafik? Jun 19, 2023 am 08:09 AM

Dalam era maklumat semasa, data besar, kecerdasan buatan, pengkomputeran awan dan teknologi lain telah menjadi tumpuan perusahaan utama. Di antara teknologi ini, teknologi pemaparan kad grafik, sebagai teknologi pemprosesan grafik berprestasi tinggi, telah mendapat perhatian yang lebih. Teknologi pemaparan kad grafik digunakan secara meluas dalam pembangunan permainan, filem dan kesan khas televisyen, pemodelan kejuruteraan dan bidang lain. Bagi pembangun, memilih rangka kerja yang sesuai dengan projek mereka adalah keputusan yang sangat penting. Antara bahasa semasa, PHP ialah bahasa yang sangat dinamik Beberapa rangka kerja PHP yang sangat baik seperti Yii2, Ph

Bagaimana untuk menggunakan rangka kerja Yii3 dalam php? Bagaimana untuk menggunakan rangka kerja Yii3 dalam php? May 31, 2023 pm 10:42 PM

Memandangkan Internet terus berkembang, permintaan untuk pembangunan aplikasi web juga semakin tinggi. Bagi pembangun, membangunkan aplikasi memerlukan rangka kerja yang stabil, cekap dan berkuasa, yang boleh meningkatkan kecekapan pembangunan. Yii ialah rangka kerja PHP berprestasi tinggi terkemuka yang menyediakan ciri yang kaya dan prestasi yang baik. Yii3 ialah versi generasi seterusnya bagi rangka kerja Yii, yang seterusnya mengoptimumkan prestasi dan kualiti kod berdasarkan Yii2. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Yii3 untuk membangunkan aplikasi PHP.

Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap Jun 21, 2023 am 11:22 AM

Rangka kerja Yii ialah rangka kerja aplikasi Web PHP sumber terbuka yang menyediakan pelbagai alatan dan komponen untuk memudahkan proses pembangunan aplikasi Web, yang mana pertanyaan data merupakan salah satu komponen penting. Dalam rangka kerja Yii, kita boleh menggunakan sintaks seperti SQL untuk mengakses pangkalan data untuk membuat pertanyaan dan memanipulasi data dengan cekap. Pembina pertanyaan rangka kerja Yii terutamanya termasuk jenis berikut: pertanyaan ActiveRecord, pertanyaan QueryBuilder, pertanyaan arahan dan pertanyaan SQL asal

Bagaimana untuk membatalkan akaun log masuk win11 Bagaimana untuk membatalkan akaun log masuk win11 Jan 11, 2024 pm 05:24 PM

Dalam sistem win11, kita perlu log masuk setiap kali kita masuk ke dalam sistem Namun, jika hanya ada satu akaun dalam sistem kita atau tidak perlu melindungi akaun, kita tidak perlu log masuk setiap kali masa, kita boleh membatalkan akaun log masuk dengan membatalkan kata laluan , mari kita lihat kaedah khusus di bawah. Cara membatalkan akaun log masuk dalam win11 1. Pertama, klik butang anak panah di tengah bar tugas dan cepat pilih pilihan "Mula". 2. Seterusnya, masukkan antara muka tetapan sistem dan klik dengan cepat pilihan "Jalankan" untuk bermula. 3. Seterusnya, masukkan arahan: controluserpasswords2 dan tekan kekunci Enter. 4. Klik untuk membuka pilihan "Sifat Akaun Pengguna" dan nyahtanda "Untuk menggunakan mesin ini, pengguna mesti memasukkan

Bagaimana untuk menetapkan kata laluan kuasa pada win11 Bagaimana untuk menetapkan kata laluan kuasa pada win11 Dec 22, 2023 pm 01:18 PM

Jika kami ingin menetapkan privasi untuk komputer kami, kami boleh menetapkan kata laluan kuasa untuk komputer, dan ia hanya perlu dilakukan dalam tetapan. Cara untuk menetapkan kata laluan hidup dalam win11: 1. Pertama, klik kanan menu "Mula" dan klik Tetapan. 2. Kemudian klik "Akaun". 3. Kemudian klik "Pilihan Log Masuk". 4. Kemudian cari "Kata Laluan" dan klik Tambah. 5. Akhirnya, ia boleh ditambah dengan jayanya.

Symfony vs Yii2: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi web berskala besar? Symfony vs Yii2: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi web berskala besar? Jun 19, 2023 am 10:57 AM

Memandangkan permintaan untuk aplikasi web terus berkembang, pembangun mempunyai lebih banyak pilihan dalam memilih rangka kerja pembangunan. Symfony dan Yii2 ialah dua rangka kerja PHP yang popular Kedua-duanya mempunyai fungsi dan prestasi yang berkuasa, tetapi apabila berhadapan dengan keperluan untuk membangunkan aplikasi web berskala besar, rangka kerja manakah yang lebih sesuai? Seterusnya kami akan menjalankan analisis perbandingan Symphony dan Yii2 untuk membantu anda membuat pilihan yang lebih baik. Gambaran Keseluruhan Asas Symphony ialah rangka kerja aplikasi web sumber terbuka yang ditulis dalam PHP dan dibina di atas

Bagaimana untuk melaksanakan pengesahan input pengguna dan penapisan keselamatan dalam PHP? Bagaimana untuk melaksanakan pengesahan input pengguna dan penapisan keselamatan dalam PHP? Jun 29, 2023 pm 03:01 PM

Bagaimana untuk melaksanakan pengesahan input pengguna dan penapisan keselamatan dalam PHP? Apabila membangunkan aplikasi web, pengesahan input pengguna dan penapisan keselamatan adalah aspek yang sangat penting. Jika input pengguna tidak dikendalikan dengan betul, ia boleh membawa kepada pelbagai kelemahan keselamatan, seperti skrip merentas tapak (XSS) dan serangan suntikan SQL. Oleh itu, pengesahan dan penapisan keselamatan input pengguna adalah salah satu langkah penting untuk melindungi aplikasi web. Artikel ini akan memperkenalkan cara melakukan pengesahan input pengguna dan penapisan keselamatan dalam PHP. Pengesahan jenis data Sebelum menerima input pengguna, ia perlu disahkan terlebih dahulu

See all articles