2017-08-24 2 views
0

i durch diesen Code neue Benutzer registrieren versuchen, und ich Passwort verschlüsseln möchte mit security.password_encoder vor Passwort-Eigenschaft Benutzer hat Wert bestehen bleiben, aber ich sehe den Fehlersymfony3: Passwort nach dem Ausführen dieser Methode leeren gesetzt

Während der Ausführung von 'INSERT INTO Benutzer (Name, Familie, Benutzername, E-Mail, Rollen, Kennwort, Salz) VALUES (?,?,?,?,?,?,?)' Mit Parametern ["root", "rooti" “, "root", "[email protected]", "[\" ROLE_ADMIN \ "]", null "2y 13 $ $ $ 70JDWmzFF0fuJyVCaB3/ueISm3FgWRBMLAkSJqcQouNAh3qPnzcg".]:

SQLSTATE [23000]: Integrität Zwangspilz tion:

public function newAction(Request $request) 
{ 
    $user = new User(); 
    $form = $this->createForm('AppBundle\Form\UserType', $user); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $encoder = $this->get("security.password_encoder"); 
     $encoded = $encoder->encodePassword($user, $user->getPlainPassword()); 
     $user->setPassword($encoded); 

     $user->setRoles(array('ROLE_ADMIN')); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($user); 
     $em->flush(); 

     return $this->redirectToRoute('user_show', array('id' => $user->getId())); 
    } 

    return $this->render('user/new.html.twig', array(
     'user' => $user, 
     'form' => $form->createView(), 
    )); 
} 

und das ist mein User-Einheit

<?php 
namespace AppBundle\Entity; 

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

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

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

/** 
* @var string 
* 
* @ORM\Column(name="family", type="string", length=255) 
*/ 
private $family; 

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

/** 
* @var string 
* 
* @ORM\Column(name="email", type="string", length=255) 
*/ 
private $email; 

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

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

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

/** 
* @var string 
* @Assert\NotBlank() 
* @Assert\Length(max=4096) 
*/ 
private $plainPassword; 


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

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

    return $this; 
} 

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

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

    return $this; 
} 

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

/** 
* 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 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 array $roles 
* 
* @return User 
*/ 
public function setRoles($roles) 
{ 
    $this->roles = $roles; 

    return $this; 
} 

public function getPlainPassword() 
{ 
    return $this->plainPassword; 
} 

public function setPlainPassword($password) 
{ 
    $this->plainPassword = $password; 
} 
/** 
* Get roles 
* 
* @return array 
*/ 
public function getRoles() 
{ 
    $roles = $this->roles; 

    // guarantees that a user always has at least one role for security 
    if (empty($roles)) { 
     $roles[] = 'ROLE_USER'; 
    } 

    return array_unique($roles); 
} 

/** 
* 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 salt 
* 
* @param string $salt 
* 
* @return User 
*/ 
public function setSalt($salt) 
{ 
    $this->salt = $salt; 

    return $this; 
} 

/** 
* Get salt 
* 
* @return string 
*/ 
public function getSalt() 
{ 
    return; 
} 

public function eraseCredentials() 
{ 
} 
} 

und i gesetzt Sicherheitsalgorithmus bcrypt ist security.yml: 1048 Spalte 'Passwort' kann

meine Methode ist hier nicht null sein ist hier

security: 
encoders: 
    AppBundle\Entity\User: bcrypt 
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 
providers: 
    database_users: 
     entity: { class: AppBundle:User, property: username} 

firewalls: 
    secured_area: 
     pattern: ^/ 
     anonymous: true 
     form_login: 
      login_path: login 
      check_path: login 
      csrf_token_generator: security.csrf.token_manager 
     logout: 
      path: security_logout 
      target: homepage 
access_control: 
    - { path: ^/admin, roles: ROLE_ADMIN } 

Antwort

1

Ihre Spaltennamen werden hier gemischt:

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

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

Sie salt in einer Spalte zu speichern genannt password (die in der Datenbank eingestellt werden, darf nicht NULL zu ermöglichen, obwohl diese Regel nicht in der Anmerkung ist) und password in einer Spalte salt genannt. Einfach umdrehen:

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

/** 
* @var string 
* 
* @ORM\Column(name="salt", type="string", length=10) 
*/ 
private $salt; 
Verwandte Themen