gpt4 book ai didi

doctrine-orm - Zend 2 + 学说 2 Auth 适配器

转载 作者:行者123 更新时间:2023-12-02 12:36:05 24 4
gpt4 key购买 nike

我正在寻找有关使用 Zend 2 和 Doctrine 2 进行身份验证的教程。特别是 Controller 和适配器的创建。

官方文档过于全局化,对我的帮助不够。

谢谢

编辑:

我使用“Doctrine Entity”(命名空间 User\Entity;)

实体在 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'
)
)
),
)

但是现在,我如何将我的 IdentityClass key 指向我的适配器? Controller :

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);
????????????

}

}

我遇到了这个错误:在第 132 行的 ...doctrine\doctrine-module\src\DoctrineModule\Options\AuthenticationAdapter.php 中的非对象上调用成员函数 getRepository()第 123 行:返回 $this->objectManager->getRepository($this->identityClass);

最佳答案

有很多方法可以做到这一点,但 zf2 的 DoctrineModule 附带了一个基于原则的身份验证适配器 (DoctrineModule\Authentication\Adapter\ObjectRepository)。还有一个用于创建适配器的工厂 (DoctrineModule\Service\AuthenticationAdapterFactory)。 DoctrineMongoODMModule 将其 module.config.php 设置为使用这些服务。 (请注意,工厂和适配器将与 ORM 一起使用,但我不确定配置键是否已添加到 DoctrineORMModule - 也许读到此内容的人会想为此创建一个 PR?)这些是相关的配置键:

    'authenticationadapter' => array(
'odm_default' => array(
'objectManager' => 'doctrine.documentmanager.odm_default',
'identityClass' => 'Application\Model\User',
'identityProperty' => 'username',
'credentialProperty' => 'password',
'credentialCallable' => 'Application\Model\User::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 Zend\Authentication\AuthenticationService
$result = $authService->authenticate($adapter);

这会将经过身份验证的用户的整个学说文档存储在 session 对象中。如果您只想在 session 对象中存储文档 ID,并从每个请求的数据库中检索经过身份验证的用户文档的其余部分,请查看 DoctrineModule\Authentication\Storage\ObjectRepository。这为 Zend\Authentication\AuthenticationService 提供了一个新的 StorageInterface

关于doctrine-orm - Zend 2 + 学说 2 Auth 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com