我正在使用Symfony 2.7,但我在登录用户时遇到问题。我使用自定义实体,我已经创建了一个自定义实体“运算符”与适当的变量和方法。我在安全文件中使用两种登录方法。一个是in_memory
,我用它来管理员登录,它正常工作,另一个是user_db
。我使用bcrypt算法来加密密码。当我尝试登录用户时,它会显示“无效凭据”消息。我究竟做错了什么?谢谢!
security.yml
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Application\AdminBundle\Entity\Operator:
algorithm: bcrypt
providers:
chain_provider:
chain:
providers: [ in_memory, user_db ]
user_db:
entity:
class: ApplicationAdminBundle:Operator
property: username
SecurityController.php
<?php
namespace Application\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
public function loginAction(Request $request)
{
$authenticationUtils = $this->get('security.authentication_utils');
$error = $authenticationUtils->getLastAuthenticationError();
return $this->render('ApplicationAdminBundle:security:login.html.twig',
array(
'error' => $error,
)
);
}
/**
* @Route("/login_check", name="login_check")
*/
public function loginCheckAction()
{
}
}
“Operator”实体和setPassword(),getPassword()方法
public function setPassword($password)
{
$this->password = password_hash ($password, PASSWORD_BCRYPT);
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
答案 0 :(得分:1)
可能你不应该使用password_hash
你必须使用知道如何处理密码加密的symfony编码器。
尝试在代码中实现类似的东西(通常在寄存器控制器中):http://symfony.com/doc/current/book/security.html#dynamically-encoding-a-password
访问此页面http://symfony.com/doc/current/book/security.html以全面了解symfony2安全性的工作原理。
答案 1 :(得分:0)
解决方案:
我所做的一切都是数据库表,因为我已将密码字段设置为varchar(25)
,并且无法完全插入哈希密码。我将其更改为varchar(255)
,现在一切正常。现在每个用户都可以登录。