symfony フォーム ビルダーを使用して通常の登録フォーム (メール + パスワード) を最初に作成しましたが、ユーザーの登録にまったく問題はありませんでした。
いくつかの技術的な問題と戦略的なもののために、symfony フォームビルダーを使用しなくなり、共通の html フォームを作成しました。ユーザー名、ソルト、およびパスワードはデータベースに保存されますが、ログインしようとすると機能しないため、パスワードまたはソルトが間違っています。 symfony フォームビルダー、そうですか?
したがって、もともと symfony フォームビルダーを使用すると、データをエンティティに直接解析できるため、次のようにしました。
if( 'POST' === $this->getRequest( )->getMethod() ) {
$form->bindRequest( $this->getRequest( ) );
if( $form->isValid( ) ) {
$userSignup = $form->getData( );
$user = $userSignup->getUser( );
$user->setPassword( $this->_encodePassword( $user ) );
さて、私は通常の形式を使用しているので:
if(isset($_GET['user_signup']['user']['username']) && $this->_validemail($_GET['user_signup']['user']['username'])) $username = $_GET['user_signup']['user']['username']; else die('BAD EMAIL');
if(isset($_GET['user_signup']['user']['password']) && strlen($_GET['user_signup']['user']['password']) >= 5 && strlen($_GET['user_signup']['user']['password']) <= 20) $password = $_GET['user_signup']['user']['password']; else die('BAD PASSWORD');
$user = new user();
$user->setUsername($username);
$user->setPassword( $this->_encodePassword( $user ) );
encodePassword 関数:
protected function _encodePassword( User $user )
{
$factory = $this->get( 'security.encoder_factory' );
$encoder = $factory->getEncoder( $user );
return $encoder->encodePassword( $user->getPassword( ), $user->getSalt( ) );
}
私は他の誰かのコードを利用しているので、encodePassword の仕組みを理解するのに苦労しているかもしれません。