2017-03-10 2 views
0

Ich habe einen zweiten Manager für meine zweite Datenbank erstellt. In dieser Basis erstelle ich eine Tabelle, die meine Benutzer enthält. Das Problem ist, dass Symfony keine Benutzer aus dieser Datenbank lädt.Authentifizierung mit einem zweiten Manager

hier ist ein Auszug meiner config.yml:

Lehre Konfiguration

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: ~ 

und hier ist ein Auszug meiner 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 

und meine Einheit implementiert " AdvancedUserInterface, \ Serializable " mit dieser Funktion:

//////////////////////////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); 
} 

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

Allerdings, wenn ich versuche, eine Verbindung bekomme ich diese Fehler in Dump-Funktion:

enter image description here

und im Abschnitt Lehre bekomme ich diese:

enter image description here

Ist das, was Sie wissen, die Lösung? Hoffe, du kannst mir helfen. Dank

Antwort

0

EDIT

So wird der Fehler aus diesem Stück Code in dem Benutzerauthentifizierungsanbieter kommt:

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

Verfahren retrieveUser gescheitert und es wirft schlechte crendentials Ausnahme. Dies erklärt, warum es keine Verbindung gibt, da sie noch nicht aufgerufen wurde.

Bevor wir Sie nach dem Code Ihres Providers fragen, schauen wir uns Ihre security.yml an, da Sie einen Provider namens seconddb erstellen und in Ihrer Firewall-Frontend versuchen, einen Provider namens acme_joueurbundle anzurufen, der wahrscheinlich nicht existiert.

So sollte Ihr security.yml wie folgt aussehen:

# 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

keine Änderung !! es funktioniert nicht.sehr komisch !! das FOSuserbundle, ich benutze es für die Verwaltung der Website und AcmeJoueurBundle, ich benutze es für Spieler im Frontend !! – strauss

+0

Ok, ich habe es nicht verstanden ... Ich dachte, du könntest dich nicht mit der zweiten Datenbank verbinden. Deine Frage hat nichts mit der Doctrine-Verbindung zu tun, die bereits funktioniert ... Du müsstest deine Entität (zumindest die wichtigen Teile) hinzufügen, damit wir dir helfen können. Vielleicht sind die Passwort- oder Salzfelder in der. Zu klein Datenbank und die Zeichenfolgen sind abgeschnitten. Vielleicht ist deine Zweigform falsch formatiert. Es gibt viele mögliche Gründe. –

+0

Ja, wenn ich versuche, mich mit Formular Login zu verbinden, die Dump zurück mir "schlechte Anmeldeinformationen" und ich habe den Eindruck, dass die Symfony keine Entity Player laden, No SQL-Abfrage wird in meinem zweiten Manager gestartet, aber die Konfiguration ist korrekt – strauss

Verwandte Themen