没有为帐户配置编码器" Collegelife \ CommonBundle \ Entity \ Admin"

时间:2014-09-11 12:01:29

标签: php symfony

# 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天内解决这个问题。 我还不是完整的自定义验证模块。 我想使用自定义身份验证代码。

2 个答案:

答案 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)

这是官方文档

http://sonata-project.org/

我们在所有项目中使用它,并使用fosUserBundle管理身份验证,fosUserBundle也是"必须具有"捆绑!!!

https://github.com/FriendsOfSymfony/FOSUserBundle