运行Symfony 2.4.4。我正在针对LDAP(通过IIS身份验证)对用户进行身份验证,然后通过实体用户提供程序从数据库中加载该用户。
这很好用。
但是,我想向访问者提供我的应用程序,这些应用程序在我的数据库中没有帐户访问应用程序的某些部分(特别是公共报告)。当我尝试创建一个没有角色的用户时,我得到一个" UsernameNotFound Exception
"来自/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php
当用户不在数据库中时,是否有办法为用户提供匿名令牌或访问者角色?
答案 0 :(得分:0)
您是否有理由单独处理这些用户而不将其添加到数据库?我在最近写的一个应用程序中有一个非常类似的设置,如果用户还没有帐户,我只需添加一个基本角色的用户。假设你正在实现UserProviderInterface:
public function loadUserByUsername($username) {
$q = $this
->createQueryBuilder('u')
->where('u.username = :username')
->setParameter('username', $username)
->getQuery();
try {
// The Query::getSingleResult() method throws an exception
// if there is no record matching the criteria.
$user = $q->getSingleResult();
} catch (NoResultException $e) {
// If the user successfully authenticated but doesn't exist
// in our database, create a user with BASIC role
$em = $this->getEntityManager();
$roles = $em->getRepository('AcmeEntityBundle:Role')->findBy(array(
'role' => 'ROLE_BASIC'
));
$user = $this->createUser($username, $roles, array());
}
return $user;
}