dousuowu4610 2014-06-26 11:16
浏览 52

从用户提供商处获取错误

I am using symfony framework. I have created two login forms and want to authenticate based on the form they access. The two forms interact with two different database. But, I am getting error "Unknown Entity namespace alias 'ESSUserBundle'". When I add ESSUserBundle to default entity manager, it works. But, This bundle should not be in default entity manager. How to solve this issue ?

Security.yml

security:
    encoders:
        ESS\UserBundle\Entity\User: 
            algorithm: sha512
            encode-as-base64: true
            iterations: 1

        ESS\AdminBundle\Entity\AdminUser:
            algorithm: sha512
            encode-as-base64: true
            iterations: 1

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        admin_area:
            name: admin_security
            entity: {class: ESSAdminBundle:AdminUser, property: username }

        company_area:
            name: company_security
            entity: { class: ESSUserBundle:User, property: username }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        admin_area:
            pattern:    ^/admin
            provider: admin_security
            anonymous: ~
            form_login:
                login_path:  /admin
                check_path:  /admin/login_check
                default_target_path: /admin/home
                failure_path: /admin

            logout:
                path:   /admin/logout
                target: /admin  

        company_area:
            pattern:    ^/login
            anonymous: ~
            provider: company_security
            form_login:
                login_path:  /login
                check_path: login_check
                default_target_path: /main/home
                failure_path: /login

            logout:
                path:   /main/logout
                target: /login  

Config.yml

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
            customer:
                driver:   "%database_driver2%"
                host:     "%database_host2%"
                port:     "%database_port2%"
                dbname:   "%database_name2%"
                user:     "%database_user2%"
                password: "%database_password2%"
                charset:  UTF8

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    ESSAdminBundle:  ~
                    #ESSRoleBundle: ~
            customer:
                connection: customer
                mappings:
                    ESSUserBundle: ~

Updated

UserRepository.php

public function loadUserByUsername($username)
    {
        $q = $this
            ->createQueryBuilder('u')
            ->where('u.username = :username OR u.email = :email')
            ->setParameter('username', $username)
            ->setParameter('email', $username)
            ->getQuery();

        try {
            // The Query::getSingleResult() method throws an exception
            // if there is no record matching the criteria.
            $user = $q->getSingleResult();
        } catch (NoResultException $e) {
            $message = sprintf(
                'Unable to find an active admin AcmeUserBundle:User object identified by "%s".',
                $username
            );
            throw new UsernameNotFoundException($message, 0, $e);
        }

        return $user;
    }
  • 写回答

1条回答 默认 最新

  • dongxun3777 2014-06-26 14:29
    关注

    Your are using two providers. I think you have to chain your providers like:

    security:
        providers:
            chain_provider:
                chain:
                    providers: [admin_area, company_area]
    

    Please read the doc here under section using multiple user providers: http://symfony.com/doc/current/book/security.html

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大