# security.yml
security:
encoders:
Cl\AdminBundle\Entity\Admin:
algorithm: sha1
encode_as_base64: false
iterations: 1
role_hierarchy:
ROLE_ADMIN: ROLE_ADMIN
providers:
cl_admin_security:
id: cl_admin_security_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_area:
pattern: ^/
provider: cl_admin_security
anonymous: ~
form_login:
login_path: /security
check_path: /security_check
default_target_path: /admin
username_parameter: _useremail
password_parameter: _userpassword
logout:
path: _demo_logout
target: _demo
access_control:
- { path: ^/security, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
# routing.yml
_security_check:
path: /security_check
_security:
path: /security
defaults: { _controller: ClSecurityBundle:Login:index }
// Cl\CommonBundle\Entity\Admin\ClSecurityProvider.php
namespace Cl\SecurityBundle\Security;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Cl\CommonBundle\Entity\Admin;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\NoResultException;
class ClSecurityProvider implements UserProviderInterface
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
/**
* Loads the user for the given username.
*
* This method must throw UsernameNotFoundException if the user is not
* found.
*
* @throws UsernameNotFoundException if the user is not found
* @param string $username The username
*
* @return UserInterface
*/
public function loadUserByUsername($username)
{
$admin = $this->findUserBy(array("email" => $username));
if (!$admin) {
$message = sprintf(
'Unable to find an active admin ClCommonBundle:Admin object identified by "%s".', $admin
);
throw new UsernameNotFoundException($message);
}
return $admin;
}
public function refreshUser(UserInterface $admin)
{
//return $this->loadUserByUsername($admin->getUsername());
$class = get_class($admin);
if (!$this->supportsClass($class)) { //This should be $class not $user
$message = sprintf('Unsupported class type : %s', $class);
throw new UnsupportedUserException($message);
}
return $this->find($user->getId());
}
/**
* Whether this provider supports the given user class
*
* @param string $class
*
* @return Boolean
*/
public function supportsClass($class)
{
return $class == "Cl\CommonBundle\Entity\Admin";
//return $this->getEntityName() === $class || is_subclass_of($class, $this->getEntityName());
}
/**
* findUserBy
*
* @param array $criteria
*
* @return mixed
*/
protected function findUserBy(array $criteria)
{
$repository = $this->em->getRepository('Cl\CommonBundle\Entity\Admin');
return $repository->findOneBy($criteria);
}
}
我发现为“Cl \ CommonBundle \ Entity \ Admin”帐户配置了无编码器的问题。
我还在SecurityBundle \ Security \ ClsecurityProvider.php中实现了ClSecurityProvider
任何人都可以帮助我解决这个问题,我将在3-4天内解决这个问题。 我还不是完整的自定义验证模块。 我想使用自定义身份验证代码。
答案 0 :(得分:1)
你有一个错字:
encoders:
Cl\AdminBundle\Entity\Admin
应该是
encoders:
Cl\CommonBundle\Entity\Admin
我还应该指出你的标题有“Collegelife \ CommonBundle \ Entity \ Admin”。
答案 1 :(得分:0)
没有时间编码轮子:) ...试试这个管理包为symfony2这真的很棒....
这是一个演示:
http://demo.sonata-project.org/admin/login(登录名:admin / pass:admin)
这是官方文档
我们在所有项目中使用它,并使用fosUserBundle管理身份验证,fosUserBundle也是"必须具有"捆绑!!!