Zend_Auth 文档翻译

Zend_Auth

Introduction

Zend_Auth 提供一个用于认证的API,包括一般使用场景的具体认证适配器
Zend_Auth 只关心认证而不是授权。认证,是一种基于认证凭证的松散定义。授权,是一个决定是否允许访问,或者在执行操作时是否授权的过程,其他的实体就在Zend_Auth范围之外了。更多关于Zend框架的授权和访问控制,请参见Zend_Acl.

Note:Zend_Auth class实现了单例模式–只有一次实例化是可用的–通过他的静态方法getInstance()。这就意味着对 Zend_Auth**class使用new操作和clone关键词并不好使;请使用**Zend_Auth::getInstance()代替。

Adapters

Zend_Auth adapter是用来认证一个特定类型的认证服务,例如LDAP,RDBMS,或是基于文件存储的方式。不同的adapter可能有不同的选择和行为,但是一些基础的东西都是一样的。例如,接受认证证书(带有身份的),执行对于认证服务的查询并返回结果,都是和Zend_Auth 一样的。
每个Zend_Auth adapter类实现了Zend_Auth_Adapter_Interface。这个interface定义一个方法,authenticate(),使得一个adapter类必须以执行一次认证查询来实现。每个adapter类必须准备好去调用authenticate()。这样的adapter准备包括了建立凭据(e.g., username and password)和定义好具体的adapter配置选项,如用于数据表adapter的数据库连接设置。
下面是一个需要用户名和密码去设置认证的authentication adapter(认证适配器)的例子。其他细节,如认证服务是怎么执行的,会被简略带过。

class MyAuthAdapter implements Zend_Auth_Adapter_Interface
{
    /**
     * Sets username and password for authentication
     *
     * @return void
     */
    public function __construct($username, $password)
    {
        // ...
    }

    /**
     * Performs an authentication attempt
     *
     * @throws Zend_Auth_Adapter_Exception If authentication cannot
     *                                     be performed
     * @return Zend_Auth_Result
     */
    public function authenticate()
    {
        // ...
    }
}

如上所示,authenticate()必须return一个Zend_Auth_Result的实例(或者一个Zend_Auth_Result的衍生类)。
如果一些原因导致不能执行认证查询话,authenticate()应该从Zend_Auth_Adapter_Exception中抛出异常。

Results

Zend_Auth adapter return一个Zend_Auth_Result的实例 with authenticate()方法,是为了代表认证尝试的结果。Adapter填充Zend_Auth_Result构建对象,接下来的四个方法就是面向user的操作,和Zend_Auth adapters的结果是一样的:
- isValid() -只在得到成功认证结果时返回true。
- getCode() -返回一个Zend_Auth_Result结果,用于确定身份验证失败类型或成功是否发生的常量标识符。适用于开发者想要区分不同的认证结果类型的状况。这允许开发者进行详细的认证结果统计,举个例子。另一个用途就是提供一个特殊的,可定制的信息给users以可用性的原因,尽管开发者鼓励去提供users一些详细的信息去代替一般的错误信息。更多内容,请看下面的notes。
- getIndentity() -返回身份认证得到的身份
- getMessage() -返回一个关于失败信息的数组
开发者可能希望分开处理这些基于认证结果的不同类型,以进行更多具体的操作。开发者可能觉得一些操作很有用,用来锁住那些登录失败次数太多的账户,在尝试太多次不存在的账户时flagging他的IP地址,也返回一个特定的信息给user。下面的result code是可用的:

Zend_Auth_Result::SUCCESS
Zend_Auth_Result::FAILURE
Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND
Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS
Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID
Zend_Auth_Result::FAILURE_UNCATEGORIZED

下面这个例子说明了开发者是如何分开处理这些result code:

```
// inside of AuthController / loginAction
$result = $this->_auth->authenticate($adapter);

switch ($result->getCode()) {

    case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
        /** do stuff for nonexistent identity **/
        break;

    case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
        /** do stuff for invalid credential **/
        break;

    case Zend_Auth_Result::SUCCESS:
        /** do stuff for successful authentication **/
        break;

    default:
        /** do stuff for other failure **/
        break;
}
```

Identity Persistence(身份的持久性)

—-未完待续

发布了34 篇原创文章 · 获赞 4 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Tianyi_liang/article/details/78718944