【发布时间】:2013-06-23 15:38:40
【问题描述】:
最初使用 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 ) );
encodePassword 函数:
protected function _encodePassword( User $user )
{
$factory = $this->get( 'security.encoder_factory' );
$encoder = $factory->getEncoder( $user );
return $encoder->encodePassword( $user->getPassword( ), $user->getSalt( ) );
}
我正在使用其他人的代码,所以我可能无法理解 encodePassword 的工作原理。
【问题讨论】:
-
检查盐是否存在并且它在你的 $user->getSalt() 中不为空
-
您是否在 security.yaml 上检查过您的编码器?您是否使用相同的编码器算法来加密和解密密码?
-
不使用 symfony2 的表单组件的“战略”原因是什么?!
-
... 在没有表单构建器的情况下创建 html 表单,在没有请求对象的情况下访问 GET 参数......无论你在这里尝试做什么......你做错了。 thx 对我的回答投了反对票,这可能导致从请求中读取的用户名/密码错误。删除了
标签: symfony