我在zf2应用程序中使用Doctrine和MongoDB ODM模块。 ZfcUser用于授权。
有没有办法使用两个集合,比如users
和clients
通过zfcuser + doctrine进行身份验证?我很好奇,如果有办法将两个mongo集合合并为一个集合用于身份验证?
答案 0 :(得分:2)
您不需要将用户合并到一个集合中,因为您可以拥有多个身份验证适配器' (有关示例,请参阅ZfcUser\Authentication\Adapter\Db
)
这些是在全局配置文件中定义的:zfcuser.global.php
我的每个适配器都按优先级顺序运行,直到返回成功的身份验证结果。
例如;我为Users
和Candidates
实体配置了以下配置。
/**
* Authentication Adapters
*
* Specify the adapters that will be used to try and authenticate the user
*
* Default value: array containing 'ZfcUser\Authentication\Adapter\Db' with priority 100
* Accepted values: array containing services that implement 'ZfcUser\Authentication\Adapter\ChainableAdapter'
*/
'auth_adapters' => array(
50 => 'JobboardCandidate\Authentication\Adapter\CandidateDatabaseAdapter',
75 => 'JobboardUser\Authentication\Adapter\UserDatabaseAdapter',
//100 => 'ZfcUser\Authentication\Adapter\Db', [this is the default]
),
答案 1 :(得分:1)
据我所知,您希望获得一个包含两种不同文档类型的集合,以便您可以使用此集合进行身份验证。
如果使用 doctrine继承映射,则可以有两个不同的类,并在一个集合中解析它们。
在这种情况下,您的Client
课程会扩展您的User
课程。如果您在findAll
中使用UserRepository
方法,则会在一个Collection
这将帮助您实现您想要的目标:
<?php
namespace MyProject\Model;
/**
* @Document
* @InheritanceType("SINGLE_COLLECTION")
* @DiscriminatorField(name="discriminator", type="string")
* @DiscriminatorMap({"user" = "User", "client" = "Client"})
*/
class User
{
// ...
}
/**
* @Document
*/
class Client extends User
{
// ...
}
然后
$userRepository->findAll();
的更多信息