Authentication Symfony 2.1仅在对密码进行编码时才出现错误凭据
以下是我添加管理员用户的代码:Authentication Symfony 2.1仅在对密码进行编码时才出现错误凭据,authentication,encoding,symfony,password-protection,Authentication,Encoding,Symfony,Password Protection,以下是我添加管理员用户的代码: public function addAction(Request $request){ $admin=new Admin(); $form=$this->createForm(new AdminType(), $admin); if($request->getMethod()=='POST'){ $form->bindRequest($request); if($form->isVa
public function addAction(Request $request){
$admin=new Admin();
$form=$this->createForm(new AdminType(), $admin);
if($request->getMethod()=='POST'){
$form->bindRequest($request);
if($form->isValid()){
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($admin);
$password = $encoder->encodePassword($admin->getPassword(), $admin->getSalt());
$admin->setPassword($password);
$em=$this->getDoctrine()->getEntityManager();
$em->persist($admin);
$em->flush();
}
}
return $this->render('PuzzleAdminBundle:Admin:add.html.twig', array(
'form'=>$form->createView()
));
}
这是我的安全。yml:
security:
encoders:
Puzzle\AdminBundle\Entity\Admin: sha512
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
chain_providers:
chain:
providers: [admin_db, in_memory]
admin_db:
entity: { class: Puzzle\AdminBundle\Entity\Admin, property: username }
in_memory:
memory:
users:
root: { password: 123456, roles: [ 'ROLE_SUPER_ADMIN' ] }
当我想在root上登录,或者当我将实体编码器设置为纯文本时,一切都正常。为什么在将entity encoder设置为sha512时总是收到错误的凭据?我认为定义的“密码”值必须是编码后的值。因此,当设置为使用sha512编码器时,它将查找的值将是“123456”的sha512哈希值,而不是纯文本密码 请看这里:
. 本节第一个示例后面的段落专门讨论了这一点。检查数据库中的字段长度。如果您正在阅读“TheBook”,那么您的字段很可能会设置为
varchar(50)
。Base64编码的SHA-512将输出88个字符的字符串。调整一下,你应该可以走了。我已经指出了问题所在,在我的情况下,这是一件非常愚蠢的事情,数据库中字段的长度太小了。先生,你是一位绅士和学者!我一直在关注这本书,并认为我对YML文件做了一些错误的事情。。。唉,天哪!!!非常感谢你!我花了两个小时改变了一切,你救了我!