🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
为了方便讲解与引用,将认证类放在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(); 实例化一个认证服务,以实现持久性认证