zoukankan      html  css  js  c++  java
  • Zend Framework学习之自定义认证适配器

    要实现自定义认证适配器,只需要定义一个类,继承Zend_Auth_Adapter_Interface接口即可。在该类中需要为该类指定authenticate()方法,并返回一个Zend_Auth_Result对象。

    代码:

    <?php
    require_once 'Zend/Auth/Adapter/Interface.php';
    class MyAdapter implements Zend_Auth_Adapter_Interface{
        protected $_username;
        protected $_password;
        public function __construct($username = null,$password = null){
    
        }
        public function getUsername(){
            return $this->_username;
        }
        public function getPassword(){
            return $this->_password;
        }
        public function setUsername($username){
            $this->_username = $username;
            return $this;
        }
        public function setPassword($password){
            $this->_password = $password;
            return $this;
        }
        public function authenticate(){//进行验证
            if($this->_username == null or $this->_password == null){
                require_once 'Zend/Auth/Adapter/Exception.php';
                throw new Zend_Auth_Adapter_Exception("没有指定用户名与密码!");
            }else{
                //定义结果数组
                $result = array(
                        'code'=>Zend_Auth_Result::FAILURE,
                        'identity'=>array(
                                'username'=>$this->_username,
                                'password'=>$this->_password
                            ),
                        'messages'=>array()
                    );
                if($this->_username=='bill' and $this->_password == '12345'){
                    $result['code']=Zend_Auth_Result::SUCCESS;
                }else{
                    $result['code']=Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID;
                    $result['messages'][] = "提供的用户名或密码不正确";
                }
                return new Zend_Auth_Result($result['code'],$result['identity'],$result['messages']);
            }
        }
    }
    $my_adapter = new MyAdapter();
    $my_adapter ->setUsername("1234");
    $my_adapter ->setPassword("zzzzz");
    $result = $my_adapter->authenticate();
    if(!$result->isValid()){
        echo "使用".$my_adapter->getUsername()."与".$my_adapter->getPassword();
        echo "不能通过验证";
        echo "<p>原因为:";
        print_r($result->getMessages());
    }else{
        echo "使用".$my_adapter->getUsername()."与".$my_adapter->getPassword();
        echo "成功通过验证!";
    }
    echo "<p>";
    $my_adapter ->setUsername("bill");
    $my_adapter ->setPassword("12345");
    $result = $my_adapter->authenticate();
    if(!$result->isValid()){
        echo "使用".$my_adapter->getUsername()."与".$my_adapter->getPassword();
        echo "不能通过验证";
        echo "<p>原因为:";
        print_r($result->getMessages());
    }else{
        echo "使用".$my_adapter->getUsername()."与".$my_adapter->getPassword();
        echo "成功通过验证!";
    }

    结果:

    使用1234与zzzzz不能通过验证

    原因为:Array ( [0] => 提供的用户名或密码不正确 )

    使用bill与12345成功通过验证!

    让我们来看看接口源代码

    <?php
    /**
     * Zend Framework
     *
     * LICENSE
     *
     * This source file is subject to the new BSD license that is bundled
     * with this package in the file LICENSE.txt.
     * It is also available through the world-wide-web at this URL:
     * http://framework.zend.com/license/new-bsd
     * If you did not receive a copy of the license and are unable to
     * obtain it through the world-wide-web, please send an email
     * to license@zend.com so we can send you a copy immediately.
     *
     * @category   Zend
     * @package    Zend_Auth
     * @subpackage Zend_Auth_Adapter
     * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
     * @license    http://framework.zend.com/license/new-bsd     New BSD License
     * @version    $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
     */
    
    
    /**
     * @see Zend_Auth_Result
     */
    require_once 'Zend/Auth/Result.php';
    
    
    /**
     * @category   Zend
     * @package    Zend_Auth
     * @subpackage Zend_Auth_Adapter
     * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
     * @license    http://framework.zend.com/license/new-bsd     New BSD License
     */
    interface Zend_Auth_Adapter_Interface
    {
        /**
         * Performs an authentication attempt
         *
         * @throws Zend_Auth_Adapter_Exception If authentication cannot be performed
         * @return Zend_Auth_Result
         */
        public function authenticate();
    }

    接口中引入了Result

    同时定义了authenticate()方法

    我们将它实现即可。

    再看看Result的内容

    <?php
    /**
     * Zend Framework
     *
     * LICENSE
     *
     * This source file is subject to the new BSD license that is bundled
     * with this package in the file LICENSE.txt.
     * It is also available through the world-wide-web at this URL:
     * http://framework.zend.com/license/new-bsd
     * If you did not receive a copy of the license and are unable to
     * obtain it through the world-wide-web, please send an email
     * to license@zend.com so we can send you a copy immediately.
     *
     * @category   Zend
     * @package    Zend_Auth
     * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
     * @license    http://framework.zend.com/license/new-bsd     New BSD License
     * @version    $Id: Result.php 24593 2012-01-05 20:35:02Z matthew $
     */
    
    
    /**
     * @category   Zend
     * @package    Zend_Auth
     * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
     * @license    http://framework.zend.com/license/new-bsd     New BSD License
     */
    class Zend_Auth_Result
    {
        /**
         * General Failure
         */
        const FAILURE                        =  0;
    
        /**
         * Failure due to identity not being found.
         */
        const FAILURE_IDENTITY_NOT_FOUND     = -1;
    
        /**
         * Failure due to identity being ambiguous.
         */
        const FAILURE_IDENTITY_AMBIGUOUS     = -2;
    
        /**
         * Failure due to invalid credential being supplied.
         */
        const FAILURE_CREDENTIAL_INVALID     = -3;
    
        /**
         * Failure due to uncategorized reasons.
         */
        const FAILURE_UNCATEGORIZED          = -4;
    
        /**
         * Authentication success.
         */
        const SUCCESS                        =  1;
    
        /**
         * Authentication result code
         *
         * @var int
         */
        protected $_code;
    
        /**
         * The identity used in the authentication attempt
         *
         * @var mixed
         */
        protected $_identity;
    
        /**
         * An array of string reasons why the authentication attempt was unsuccessful
         *
         * If authentication was successful, this should be an empty array.
         *
         * @var array
         */
        protected $_messages;
    
        /**
         * Sets the result code, identity, and failure messages
         *
         * @param  int     $code
         * @param  mixed   $identity
         * @param  array   $messages
         * @return void
         */
        public function __construct($code, $identity, array $messages = array())
        {
            $code = (int) $code;
    
            if ($code < self::FAILURE_UNCATEGORIZED) {
                $code = self::FAILURE;
            } elseif ($code > self::SUCCESS ) {
                $code = 1;
            }
    
            $this->_code     = $code;
            $this->_identity = $identity;
            $this->_messages = $messages;
        }
    
        /**
         * Returns whether the result represents a successful authentication attempt
         *
         * @return boolean
         */
        public function isValid()
        {
            return ($this->_code > 0) ? true : false;
        }
    
        /**
         * getCode() - Get the result code for this authentication attempt
         *
         * @return int
         */
        public function getCode()
        {
            return $this->_code;
        }
    
        /**
         * Returns the identity used in the authentication attempt
         *
         * @return mixed
         */
        public function getIdentity()
        {
            return $this->_identity;
        }
    
        /**
         * Returns an array of string reasons why the authentication attempt was unsuccessful
         *
         * If authentication was successful, this method returns an empty array.
         *
         * @return array
         */
        public function getMessages()
        {
            return $this->_messages;
        }
    }
    authenticate()方法返回一个Result类的对象,这个对象可以查看是否验证成功。以及错误结果。

    小结:剖析源代码能更好的使用它。
  • 相关阅读:
    Oracle expdp导出多表或表中的部分数据
    sklearn随机森林-分类参数详解
    python中函数 reshape(-1,1)
    Scikit-Learn & TensorFlow机器学习实用指南(二):一个完整的机器学习项目【上】
    查看包内函数:
    盘点 | Python自带的那些数据集
    机器学习之数据预处理
    Python Numpy模块函数np.c_和np.r_
    Pandas dataframe数据写入文件和数据库
    机器学习入门-文本数据-构造Tf-idf词袋模型(词频和逆文档频率) 1.TfidfVectorizer(构造tf-idf词袋模型)
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/3016883.html
Copyright © 2011-2022 走看看