2015-12-31 19 views
5

Nach einem Upgrade auf php7 gibt der BCryptPasswordEncoder den folgenden Fehler aus, z. bei der Anmeldung bei der Verwendung von FOSUserBundle Standard Registrierungsseite:FOSUserBundle BCryptPasswordEncoder salting

„Die Nutzung der Option 'Salz' ist in C veraltet password_hash: \ xampp \ htdocs \ ascentary \ Anbieter \ symfony \ symfony \ src \ Symfony \ Component \ Security \ Core \ Encoder \ BCryptPasswordEncoder.php Linie 81 "an. C: \ xampp \ htdocs \ Testproject \ Anbieter \ Behat \ Behat \ src \ Behat \ Testwork \ Anruf \ Handler \ RuntimeCallHandler"

I‘ Dieses Problem wurde aufgespürt, und das Problem ist die FOS UserManager-Klasse, die folgendes aufruft:

/** 
* {@inheritDoc} 
*/ 
public function updatePassword(UserInterface $user) 
{ 
    if (0 !== strlen($password = $user->getPlainPassword())) { 
     $encoder = $this->getEncoder($user); 
     $user->setPassword($encoder->encodePassword($password, $user->getSalt())); 
     $user->eraseCredentials(); 
    } 
} 

Hier übergeben $ user-> getSalt() den Fehler, da es bei php7 nicht mehr möglich ist, eine benutzerdefinierte Funktion für die Funktion "bclypt coding/password_hash" an salt zu übergeben. Darüber hinaus sehe ich ein Problem in der Basis fos Benutzer Einheit, weil in seinem Konstruktor wird das Salz gesetzt wie:

$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); 

Fragen:

(1), wie der Fehler lösen ich oben geschrieben? Vielleicht überschreibt der UserManager oder gibt es eine Lösung von fos?

(2) Wie wird das Salz, das automatisch erzeugt wird, ordnungsgemäß geschützt?

(3) Sind weitere Aktualisierungen erforderlich, z. B. die Aktualisierung der ircmaxell lib?

+0

[bcrypt ist kein Verschlüsselungsalgorithmus] einstellen (https : //paragonie.com/blog/2015/08/you-wouldnt-base64-a-password-cryptography-decoded) –

+1

Danke, schöner Artikel! – user3746259

Antwort

2

Upgrade auf Symfony3.

BCryptPasswordEncoder.php Linie 75:

if ($salt) { 
    // Ignore $salt, the auto-generated one is always the best 
} 
+1

Ich kann nicht upgraden, da viele andere Composer-Pakete von symfony 2.X abhängig sind, wie Sonata-Projekt. Die meisten Pakete sind noch nicht auf die Arbeit mit symfony3 aktualisiert worden. – user3746259

+0

Sie können also versuchen, den Benutzer salt in Benutzerentität/Dokument auf null zu setzen. – malcolm

+0

Auch daran gedacht, aber dann wäre das Salz immer Null und ich könnte das Auto-Generierte nicht nochmal speichern/benutzen. Siehe Nr 2) – user3746259

1

Sie $ Salz Attribut ist null durch zwingende FOS \ UserBundle \ Modell \ User

namespace YourNamespace\UserBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity(repositoryClass="YourNamespace\UserBundle\Repository\UserRepository") 
* @ORM\Table(name="`user`") 
* @ORM\AttributeOverrides({ 
      @ORM\AttributeOverride(
*    name="salt", 
*    [email protected]\Column(name="salt", type="string", nullable=true) 
*   ) 
*  }) 
* 
*/ 
class User extends BaseUser 
{ 

    /** 
    * User constructor. 
    */ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->salt = null; 
    } 

    //another codes 
}