Zend 2+条令2 Auth适配器



我正在寻找一个关于Zend 2和Doctrine 2身份验证的教程。特别是控制器和适配器的创建。

官方文件过于全球化,对我帮助不够。

谢谢

编辑:

我使用"条令实体"(命名空间User\Entity;)

实体在module.config.php文件中注册:

'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'DoctrineORMMappingDriverAnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
            )
        )          
    ),
)

但是现在,如何将identityClass密钥指向适配器?控制器:

use ZendMvcControllerAbstractActionController,
    ZendViewModelViewModel,
    ZendAuthenticationAuthenticationService,
    DoctrineORMEntityManager,
    DoctrineModuleAuthenticationAdapterObjectRepository as DoctrineAdapter,        
    UserEntityUser,  
    UserFormUserForm;
class UserController extends AbstractActionController 
{
protected $em;
public function setEntityManager(EntityManager $em)
{
    $this->em = $em;
}
public function getEntityManager()
{
    if (null === $this->em)
        $this->em = $this->getServiceLocator()->get('DoctrineORMEntityManager');
    return $this->em;
} 
public function getRepository()
{
    if (null === $this->em) 
        $this->em = $this->getEntityManager()->getRepository('UserEntityUser');
    return $this->em;
} 
public function loginAction()
{
    ....
    ????????????
    $adapter = new DoctrineAdapter();
    $adapter->setIdentityValue($username);
    $adapter->setCredentialValue($password);
    $auth = new AuthenticationService();    
    $result=$auth->authenticate($adapter);
    ????????????
}
}

我遇到了这样的错误:对中的非对象调用成员函数getRepository()。。。第132行的条令\条令模块\src\DoctrineModule\Options\AuthenticationAdapter.php第123行:返回$this->objectManager->getRepository($this->identityClass);

有很多方法可以做到这一点,但zf2的DoctrineModule附带了一个基于条令的身份验证适配器(DoctrineModuleAuthenticationAdapterObjectRepository)。还有一个工厂来创建适配器(DoctrineModuleServiceAuthenticationAdapterFactory)。DoctrineMongoODMModule设置了module.config.php以使用这些服务。(请注意,工厂和适配器将使用ORM,但我不确定配置密钥是否已添加到DoctrineORMModule中-也许读过这篇文章的人会为此创建PR?)以下是相关的配置密钥:

    'authenticationadapter' => array(
        'odm_default' => array(
            'objectManager' => 'doctrine.documentmanager.odm_default',
            'identityClass' => 'ApplicationModelUser',
            'identityProperty' => 'username',
            'credentialProperty' => 'password',
            'credentialCallable' => 'ApplicationModelUser::hashPassword'
        ),
    ),

identityClass是代表您的认证用户的条令文档。identityProperty通常是用户名。getUsername将被适配器调用以访问它。credentialProperty通常是密码。getPassword将被适配器调用以访问它。credentialCallable是可选的。它应该是一个可调用的(方法、静态方法、闭包),它将对credentialProperty进行散列-您不需要这样做,但这通常是个好主意。适配器将期望可调用的具有以下形式:function hashPassword($identity, $plaintext)

要获得身份验证适配器,请使用:

$serviceLocator->get('doctrine.authenticationadapter.odm_default');

请注意,所有这些只为您提供了一个身份验证适配器,它实际上并没有进行身份验证。身份验证是这样完成的:

$adapter = $serviceLocator->get('doctrine.authenticationadapter.odm_default');
$adapter->setIdentityValue($username);
$adapter->setCredentialValue($password);
$authService = new ZendAuthenticationAuthenticationService
$result = $authService->authenticate($adapter);

这将把经过身份验证的用户的整个条令文档存储在会话对象中。如果您只想在会话对象中存储文档ID,并在每次请求时从DB中检索经过身份验证的用户文档的其余部分,请查看DoctrineModuleAuthenticationStorageObjectRepository。这为CCD_ 12提供了一个新的CCD_。

相关内容

  • 没有找到相关文章

最新更新