2017-03-10 21 views
0

我为我的第二个数据库创建了第二位经理。 在这个基础上,我创建了一个包含我的用户的表格。 问题是symfony不会从这个数据库加载用户。与第二位经理身份验证

这里是我config.yml的摘录:

学说配置

doctrine: 
dbal: 
    default_connection: default 
    connections: 
     default: 
      driver: pdo_mysql 
      host:  "%database_host%" 
      port:  "%database_port%" 
      dbname: "%database_name%" 
      user:  "%database_user%" 
      password: "%database_password%" 
      charset: UTF8 
     seconddb: 
      driver: pdo_mysql 
      host:  "xx.xx.xx.xx" 
      port:  "3306" 
      dbname: "acme_test" 
      user:  "acmegamestest" 
      password: "mypassword" 
      charset: UTF8 

    # if using pdo_sqlite as your database driver: 
    # 1. add the path in parameters.yml 
    #  e.g. database_path: "%kernel.root_dir%/data/data.db3" 
    # 2. Uncomment database_path in parameters.yml.dist 
    # 3. Uncomment next line: 
    #  path:  "%database_path%" 

orm: 
    default_entity_manager: default 
    auto_generate_proxy_classes: "%kernel.debug%" 
    #naming_strategy: doctrine.orm.naming_strategy.underscore 
    entity_managers: 
     default:  
      connection: default 
      mappings: 
       acmeAdminBundle: ~ 
       acmeBlogBundle: ~ 
       gedmo_translatable: 
        type: annotation 
        alias: GedmoTranslatable 
        prefix: Gedmo\Translatable\Entity 
        is_bundle: false 
        # make sure vendor library location is correct 
        dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity" 
     seconddb: 
      connection: seconddb 
      mappings: 
       acmeJoueurBundle: ~ 

,这里是我的security.yml的摘录:

encoders: 
    FOS\UserBundle\Model\UserInterface: sha512 
    Acme\JoueurBundle\Entity\Players: 
     algorithm: sha512 
     encode_as_base64: false 

providers: 
    seconddb: 
     entity: 
      class: Acme\JoueurBundle\Entity\Players 
      property: username  
      manager_name: seconddb 
    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
    administration: 
     pattern: ^/admin 
     provider: fos_userbundle 
     context: administration 
     form_login: 
      #csrf_provider: security.csrf.token_manager 
      login_path : fos_user_security_login 
      check_path : fos_user_security_check 
      failure_path : null 
      default_target_path : /admin     
     logout:  
      path : fos_user_security_logout 
      target : /connexion 
     anonymous: true  
    frontend: 
     pattern: ^/ 
     provider: acme_joueurbundle 
     context: frontend 
     form_login: 
      #csrf_provider: form.csrf_provider 
      login_path : acme_players_login 
      check_path : acme_players_check 
      failure_path : null 
      default_target_path : acme_players_userprofile      
     logout:  
      path : acme_players_logout 
      target : acme_players_login 
     anonymous: true 

和我的实体实施“ AdvancedUserInterface,\ Serializable“ 具有此功能:

//////////////////////////liaison pour symfony//////////////////////////// 

public function getRoles() 
{ 
    return array('ROLE_PLAYERS'); 
} 

public function getSalt(){ 

    return $this->salt; 
} 

public function eraseCredentials(){ 

} 

public function isAccountNonExpired() 
{ 
    return true; 
} 

public function isCredentialsNonExpired() 
{ 
    return true; 
} 

public function isAccountNonLocked() 
{ 

    return !$this->banned; 
} 

public function isEnabled() 
{ 
    return $this->active; 
} 



    /** @see \Serializable::serialize() */ 
public function serialize() 
{ 
    return serialize(array(
     $this->id, 
     $this->username, 
     $this->password, 
     $this->active 
     // see section on salt below 
     // $this->salt, 
    )); 
} 

/** @see \Serializable::unserialize() */ 
public function unserialize($serialized) 
{ 
    list (
     $this->id, 
     $this->username, 
     $this->password, 
     $this->active 
     // see section on salt below 
     // $this->salt 
    ) = unserialize($serialized); 
} 

///////////////////////////////////////////////////////////////////////////// 

然而,当我尝试连接,我在转存功能得到这个错误:

enter image description here

,并在部分原则我得到这个:

enter image description here

是你知道什么解决方案? 希望你能帮助我。 感谢

回答

0

编辑

因此,错误来自这段代码在用户身份验证提供:

try { 
    $user = $this->retrieveUser($username, $token); 
} catch (UsernameNotFoundException $e) { 
    if ($this->hideUserNotFoundExceptions) { 
     throw new BadCredentialsException('Bad credentials.', 0, $e); 
    } 
    $e->setUsername($username); 
    throw $e; 
} 

的方法retrieveUser失败,它抛出坏crendentials例外。这解释了为什么没有连接,因为它还没有被调用。

在询问你的提供者代码之前,让我们看看你的security.yml,因为你创建了一个名为seconddb的提供者,并且在你的防火墙前端尝试调用一个不存在的提供者acme_joueurbundle。

所以,你security.yml应该是这样的:

# app/config/security.yml 

[...] 

providers: 
    seconddb: 
     entity: 
      class: Acme\JoueurBundle\Entity\Players 
      property: username  
      manager_name: seconddb 
    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
    administration: 
     provider: fos_userbundle 
     [...] 
    frontend: 
     provider: seconddb 
     [...] 
+0

没有变化!它不工作。很奇怪!! FOSuserbundle,我用它来管理网站和AcmeJoueurBundle,我用它来为前端的玩家们! – strauss

+0

好吧,我不明白...我以为你不能连接到第二个数据库。您的问题与已经似乎正常工作的Doctrine连接无关...您必须添加您的实体(至少是重要的部分),以便我们可以帮助您。也许密码或盐字段太小数据库和字符串被截断。也许你的树枝格式不正确。有很多可能的原因。 –

+0

是的,当我尝试连接表单登录时,转储返回我“不良凭据”,并且我得到了symfony不加载实体玩家的印象,没有sql查询在我的第二个管理器中启动,但配置正确 – strauss