doctrine2 zend-framework2 zend-auth

doctrine2 - Zend 2+doctrine 2 Auth Adapter



zend-framework2 zend-auth (1)

Hay muchas maneras de hacerlo, pero DoctrineModule para zf2 se envía con un adaptador de autenticación basado en doctrina ( DoctrineModule/Authentication/Adapter/ObjectRepository ). También hay una fábrica para crear el adaptador ( DoctrineModule/Service/AuthenticationAdapterFactory ). DoctrineMongoODMModule tiene su module.config.php configurado para usar estos servicios. (Tenga en cuenta que la fábrica y el adaptador funcionarán con ORM, pero no estoy seguro de si las claves de configuración se han agregado a DoctrineORMModule aún; ¿tal vez alguien que lea esto desearía crear un RP para eso?) Estas son las claves de configuración relevantes:

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

identityClass es el documento de doctrina que representa a su usuario autenticado. El identityProperty es normalmente el nombre de usuario. getUsername será llamado por el adaptador para acceder a esto. credentialProperty es normalmente la contraseña. getPassword será llamado por el adaptador para acceder a esto. credentialCallable es opcional. Debería ser un método invocable (método, método estático, cierre) que elimine la Propiedad credential; no es necesario que lo haga, pero normalmente es una buena idea. El adaptador esperará que el invocable tenga el siguiente formato: function hashPassword($identity, $plaintext) .

Para obtener el uso del adaptador de autenticación:

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

Tenga en cuenta que todo esto solo le proporciona un adaptador de autenticación, en realidad no realiza la autenticación. La autenticación se realiza de la siguiente manera:

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

Esto almacenará todo el documento de doctrina del usuario autenticado en el objeto de sesión. Si desea almacenar solo el ID del documento en el objeto de la sesión y recuperar el resto del documento del usuario autenticado a partir del DB cada solicitud, eche un vistazo a DoctrineModule/Authentication/Storage/ObjectRepository . Esto proporciona una nueva StorageInterface para Zend/Authentication/AuthenticationService .

Estoy buscando un tutorial sobre autenticación con Zend 2 y Doctrine 2. En particular, la creación del controlador y el adaptador.

La documentación oficial es demasiado global y no me ayuda lo suficiente.

gracias

EDITAR:

utilizo "Doctrine Entity" (espacio de nombres User / Entity;)

La entidad se registra en el archivo module.config.php:

''doctrine'' => array( ''driver'' => array( __NAMESPACE__ . ''_driver'' => array( ''class'' => ''Doctrine/ORM/Mapping/Driver/AnnotationDriver'', ''cache'' => ''array'', ''paths'' => array(__DIR__ . ''/../src/'' . __NAMESPACE__ . ''/Entity'') ), ''orm_default'' => array( ''drivers'' => array( __NAMESPACE__ . ''/Entity'' => __NAMESPACE__ . ''_driver'' ) ) ), )

Pero ahora, ¿cómo puedo apuntar mi clave identityClass a mi adaptador? Controlador :

use Zend/Mvc/Controller/AbstractActionController, Zend/View/Model/ViewModel, Zend/Authentication/AuthenticationService, Doctrine/ORM/EntityManager, DoctrineModule/Authentication/Adapter/ObjectRepository as DoctrineAdapter, User/Entity/User, User/Form/UserForm; 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(''Doctrine/ORM/EntityManager''); return $this->em; } public function getRepository() { if (null === $this->em) $this->em = $this->getEntityManager()->getRepository(''User/Entity/User''); return $this->em; } public function loginAction() { .... ???????????? $adapter = new DoctrineAdapter(); $adapter->setIdentityValue($username); $adapter->setCredentialValue($password); $auth = new AuthenticationService(); $result=$auth->authenticate($adapter); ???????????? } }

Tengo este error: Llamar a una función miembro getRepository () en un no objeto en ... doctrine / doctrine-module / src / DoctrineModule / Options / AuthenticationAdapter.php en línea 132 línea 123: return $ this-> objectManager-> getRepository ($ this-> identityClass);