2016-03-28 3 views
-1

In den letzten paar Tagen habe ich Probleme mit der Anmeldung eines Datenbankbenutzers mit Symfony/Doctrine, und ich bin jetzt ziemlich fest (ich bin neu in Symfony, BTW). Ich habe das Login mit dem in_memory-Provider (zu Beginn) funktioniert, aber jetzt möchte ich mich mit einem Datenbank-Benutzer anmelden und ich weiß nur nicht, was los ist.Symfony/Doktrin: Datenbankbenutzer kann nicht angemeldet werden, etwas nicht in security.yml richtig?

Ich ging die Dokumentation immer wieder durch und ich denke, ich habe alles richtig gemacht. Ich bekomme keine Fehler, es heißt nur "Ungültige Anmeldedaten". wenn ich versuche mich einzuloggen. Ich muss das Gefühl haben, dass es etwas mit Sicherheit zu tun hat. Aber ich habe alles versucht, was ich finden konnte. Unten ist mein Code;

security.yml;

security: 
providers: 
    provider_users: 
     entity: 
      class: AppBundle:User 
      property: username 

encoders: 
    AppBundle\Entity\User: 
     algorithm: bcrypt 

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

    main: 
     pattern: ^/ 
     anonymous: ~ 
     provider: provider_users 
     form_login: 
      login_path: login 
      check_path: login 

access_control: 
    - { path: ^/admin, roles: ROLE_ADMIN } 

User.php;

<?php 
// src/AppBundle/Entity/User.php 

namespace AppBundle\Entity; 

use Symfony\Component\Security\Core\User\UserInterface; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* AppBundle\Entity\User 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository") 
*/ 
class User implements UserInterface, \Serializable 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id() 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="username", type="string", length=25, unique=true) 
    */ 
    private $username; 

    /** 
    * @ORM\Column(name="salt", type="string", length=40) 
    */ 
    private $salt; 

    /** 
    * @ORM\Column(name="password", type="string", length=40) 
    */ 
    private $password; 

    /** 
    * @ORM\Column(name="email", type="string", length=60, unique=true) 
    */ 
    private $email; 

    /** 
    * @ORM\Column(name="roles", type="string") 
    */ 
    private $roles; 

    /** 
    * @ORM\Column(name="is_active", type="boolean") 
    */ 
    private $isActive; 

    public function __construct() 
    { 
     $this->isActive = true; 
     $this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); 
    } 

    public function eraseCredentials() 
    { 
     // 
    } 

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

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

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set username 
    * 
    * @param string $username 
    * 
    * @return User 
    */ 
    public function setUsername($username) 
    { 
     $this->username = $username; 

     return $this; 
    } 

    /** 
    * Get username 
    * 
    * @return string 
    */ 
    public function getUsername() 
    { 
     return $this->username; 
    } 

    /** 
    * Set salt 
    * 
    * @param string $salt 
    * 
    * @return User 
    */ 
    public function setSalt($salt) 
    { 
     $this->salt = $salt; 

     return $this; 
    } 

    /** 
    * Get salt 
    * 
    * @return string 
    */ 
    public function getSalt() 
    { 
     return $this->salt; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    * 
    * @return User 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set email 
    * 
    * @param string $email 
    * 
    * @return User 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * Set roles 
    * 
    * @param string $roles 
    * 
    * @return User 
    */ 
    public function setRoles($roles) 
    { 
     $this->roles = json_encode($roles); 

     return $this; 
    } 

    /** 
    * Get roles 
    * 
    * @return string[] 
    */ 
    public function getRoles() 
    { 
     return json_decode($this->roles); 
    } 

    /** 
    * Set isActive 
    * 
    * @param boolean $isActive 
    * 
    * @return User 
    */ 
    public function setIsActive($isActive) 
    { 
     $this->isActive = $isActive; 

     return $this; 
    } 

    /** 
    * Get isActive 
    * 
    * @return boolean 
    */ 
    public function getIsActive() 
    { 
     return $this->isActive; 
    } 
} 

ich auch, wenn ich nur den Benutzer "von Hand" bekommen getestet konnte mit getRepository() -> findAll() und das sieht in Ordnung;

array (size=1) 
0 => 
    object(AppBundle\Entity\User)[323] 
     private 'id' => int 20 
     private 'username' => string 'user' (length=4) 
     private 'salt' => string 'mqshzqa9syok0kw8ss4cscc84k4k804' (length=31) 
     private 'password' => string 'user1' (length=5) 
     private 'email' => string '[email protected]' (length=18) 
     private 'roles' => string '' (length=0) 
     private 'isActive' => boolean true 

success! 

Irgendwelche Vorschläge? Danke im Voraus!

+1

Das Passwort in der db ist Klartext, sollte aber bcrypt hashed – JimL

+0

Wie JimL sagte, bei der Registrierung müssen Sie Ihr Passwort mit bcrypt verschlüsseln. Ihr Passwort sieht wie normaler Text aus. – trauma

+0

Danke Jungs, das scheint eine logische Erklärung zu sein. Ich werde mich darum kümmern und wenn ich es repariere, werde ich eine Lösung posten! –

Antwort

1

Sie müssen das Passwort mit bcrypt verschlüsseln. Möglicherweise war der Benutzer vor dem Hinzufügen der Sicherheit in der Datenbank. Versuchen Sie einen anderen Benutzer mit dem verschlüsselten Passwort in PHP hinzuzufügen, zum Beispiel: string crypt (string $ str [, string $ salt])

Die Zeichenfolge, die Sie in das Passwortfeld eingeben Benutzer: user-> setPassword (' Ihre verschlüsselte Zeichenfolge ')

+0

Ja, Sie haben recht, ich füge es "manuell" hinzu, damit das Passwort überhaupt nicht verschlüsselt wird. Danke für die Beispiele, ich probiere sie aus! –

+0

Hey, ich habe versucht, das Passwort in PHP-Verschlüsselung, aber leider hat es nicht funktioniert ... Sie sind in der db verschlüsseln, noch nicht, aber wenn ich versuche, ich einzuloggen noch die Fehlermeldung „Ungültige Anmeldeinformationen“. Ich benutzte; $ this-> get ('security.password_encoder') -> encodePassword ($ user, $ benutzer-> getPlainPassword()); Weitere Vorschläge? Vielen Dank. –

+0

Hey !, denke ich, die Dokumentation helfen: http: //symfony.com/doc/current/book/security.html#dynamically-encoding-a-password Wenn es nicht funktioniert, versuchen Sie dump() vor und nach dem Verschlüsseln des Passworts für den Vergleich. Beachten Sie, dass das Passwort in der Datenbank diese verschlüsselt, wenn Sie noch das Passwort im Klartext haben, encriptala und aktualisieren Sie die DB. Tut mir leid, dass ich nicht mehr helfen konnte – Jherel

Verwandte Themen