加载中...

8.2 新建认证类


为了方便讲解与引用,将认证类放在Album模块的模型目录下。用户认证的方式有多种,在这里介绍的一种是作者在开发中常用到的一种,数据库认证的持久性认证。ZF2中的持久性认证其本质还是通过Session来实现的,只不过开发者在开发的时候根据就不会察觉到Session在这期间的存在。ZF2在使用持久性认证的时候如果没有对认证空间进行重新命名,ZF2使用使用一个Zend_auth为其Session的默认命名空间,当你在new一个认证的实例的时候系统会自动的找到Zend_auth对应的Session命名空间。在此也可以看认证类与其他类在进行new 的时候可能会有所不同,这种不同也正是由于Session的相关机制所带来的。

添加文件:/module/Album/src/Album/Model.MyAuth.php,具体内容如下:

namespace Album\Model;
use Zend\Db\Adapter\Adapter as DbAdapter;
use Zend\Authentication\Adapter\DbTable  as AuthAdapter;
use Zend\Authentication\AuthenticationService;
class MyAuth {
    protected $adapter;
    public function __construct() {
        $this->adapter = new DbAdapter(array(
                      'driver'=>'Pdo_Mysql',
                      'database'=>'test',
                      'host'=>'localhost',
                      'username'=>'root',
                      'password'=>''
        ));
    }

    public function auth() {
        $authAdapter = new AuthAdapter($this->adapter);
        $authAdapter
                ->setTableName('user')             // 认证的数据表
                ->setIdentityColumn('username')     // 认证字段
                ->setCredentialColumn('password');  // 校验字段
        $authAdapter
                ->setIdentity('admin')  // 认证值
                ->setCredential('admin');// 校验值
        $auth = new AuthenticationService();
        $result = $auth->authenticate($authAdapter);
                if($result->isValid()){
            $auth->getStorage()->write($authAdapter->getResultRowObject());
            return true;
        }
       return false;
    }
    public function isAuth(){
        $auth = new AuthenticationService();
        if($auth->hasIdentity()) return true;
        return false;
    }
}

代码解释:

public function auth() {} 进行认证

public function isAuth(){} 通过持久性认证判断是否已经通过认证

$authAdapter = new AuthAdapter($this->adapter); 实例为一个认证适配器

$auth = new AuthenticationService(); 实例化一个认证服务,以实现持久性认证


还没有评论.