最初使用 symfony 表单生成器创建一个普通的注册表单(电子邮件 + 密码),我发现注册我的用户没有任何问题。
对于一些技术问题和战略问题,我不再使用 symfony 表单构建器,我只是制作了一个通用的 html 表单。用户名、salt 和密码保存在数据库中,但是当我尝试登录时它不起作用,所以密码或 salt 是错误的,这让我认为也许 salt 是使用令牌创建的,作为由创建的隐藏字段发送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 ) );
编码密码函数:
protected function _encodePassword( User $user )
{
$factory = $this->get( 'security.encoder_factory' );
$encoder = $factory->getEncoder( $user );
return $encoder->encodePassword( $user->getPassword( ), $user->getSalt( ) );
}
我正在使用其他人的代码,所以我可能无法理解 encodePassword 的工作原理。