1.数据库表认证
// 创建一个 in-memory SQLite 数据库连接
$dbAdapter = new Zend_Db_Adapter_Pdo_Sqlite(array('dbname' =>
':memory:'));
// 构造一个简单表的创建语句
$sqlCreate = 'CREATE TABLE [users] ('
. '[id] INTEGER NOT NULL PRIMARY KEY, '
. '[username] VARCHAR(50) UNIQUE NOT NULL, '
. '[password] VARCHAR(32) NULL, '
. '[real_name] VARCHAR(150) NULL)';
// 创建认证证书表
$dbAdapter->query($sqlCreate);
// 构造用来插入一行可以成功认证的数据的语句
$sqlInsert = "INSERT INTO users (username, password, real_name) "
. "VALUES ('my_username', 'my_password', 'My Real Name')";
// 插入数据
$dbAdapter->query($sqlInsert);
// 用构造器参数来配置实例...
$authAdapter = new Zend_Auth_Adapter_DbTable(
$dbAdapter,
'users',
'username',
'password'
);
// 用构造器参数来配置实例...
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter
->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password')
;
// 设置输入的证书的值(例如,从登陆的表单)
$authAdapter
->setIdentity('my_username')
->setCredential('my_password')
;
// 执行认证查询,并保存结果
$result = $authAdapter->authenticate();
// 输出身份
echo $result->getIdentity() . "\n\n";
// 输出结果行
print_r($authAdapter->getResultRowObject());
/* Output:
my_username
Array
(
[id] => 1
[username] => my_username
[password] => my_password
[real_name] => My Real Name
)
*/
如上的是直接构建一个数据库和表。显然这样不现实,我们一般是把用户信息存储到Oracle,DB2,MySQL这样的数据库。
那我们就不需要像以上的自己构建数据库和表,直接用以下的代码:
$dbAdapter = Zend_DB_TABLE::getDefaultAdapter();
2.摘要式认证
这个认证网上普遍都是copy的Zend文档里面的。
<?php
require_once 'Zend/Auth/Adapter/Digest.php'; //加载Zend_Auth基本接口
header("Content-Type:text/html;charset=utf-8");
$filename="what.txt"; //定义文件名
$realm1="realm"; //定义领域1
$username1="user"; //定义用户名1
$password1="somePassword"; //定义密码1
/*创建一个摘要式认证对象*/
$auth1=new Zend_Auth_Adapter_Digest("what.txt",$realm1,$username1,$password1);
$result1=$auth1->authenticate(); //返回一个Zend_Auth_Result
var_dump($result1);
if($result1->isValid()) //判断结果
{
echo "成功通过认证!"; //如果成功输出内容
}
else //如果失败输出内容
{
echo "无法通过认证!";
echo "<p>";
echo "失败原因为:<p>";
print_r($result1->getMessages()); //输出失败原因
}
?>
以上这个代码是没什么问题,问题就是这个what.txt怎么写。
我的是:
user1:realm1:qq
user:realm:20b5f2fcaa9779a568a81600226ae10e
我把它放在public目录下
1.我试了一下,不能有空行,不然会认证失败。
2.再一个就是这每一行要怎么写。关键是第二个冒号后面的,是password MD5加密还是所有的Md5加密。我看了框架底层的了解
md5("$this->_username:$this->_realm:$this->_password"),所以那一串就是MD5("yourUserName:yourRealm:yourPassword")
然后认证就会成功。