没有DbTable检查的Zend Framework 2身份验证

时间:2013-11-26 15:05:25

标签: php session authentication zend-framework2

我正在尝试制作Zend 2经典身份验证,而不使用DbTable检查。

我会更好地解释

  • 我有一个自定义方法authenticate(),可以对用户进行身份验证(独立于Zend Auth)。
  • 我创建了一个扩展Zend \ Authentication \ Storage \ Session
  • 的自定义类
  • 现在我想用以下内容将数据保存到会话中:

    $authService->getStorage()->write($this);
    

问题是在我执行的下一页调用中使用该代码:

if($authService->hasIdentity())

它反应错误。

那么,我该如何使用自定义身份验证来保存身份?我想我可以实现Zend \ Authentication \ Adapter \ AdapterInterface但我不知道如何......

任何帮助表示赞赏, 非常感谢:))

1 个答案:

答案 0 :(得分:3)

你可以这样创建一个适配器:

use Zend\Authentication\Adapter\AdapterInterface;
use Zend\Authentication\Result as AuthResult;

class MyAdapter implements AdapterInterface
{

    /**
     * @return \Zend\Authentication\Result
     */
    public function authenticate()
    {
        /* Return if can't find user */
        return new AuthResult(AuthResult::FAILURE_IDENTITY_NOT_FOUND, null);
        /* Return if success, second parameter is the identity, e.g user. */
        return new AuthResult(AuthResult::SUCCESS, $identity);
        /* Return if user found, but credentials were invalid */
        return new AuthResult(AuthResult::FAILURE_CREDENTIAL_INVALID, null);
    }
}

您可以将此适配器与ZF2 AuthenticationService一起使用,如下所示:

$auth_service = new \Zend\Authentication\AuthenticationService();
/* Where $myAdapter is a instance of the MyAdapter class above */
$auth_service->setAdapter($myAdapter);