我正在使用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;
}
也许你不应该使用password_hash
,你必须使用symfony的编码器谁知道如何处理密码的加密。试着在你的代码中实现这样的东西(通常在寄存器控制器中):http://symfony.com/doc/current/book/security.html#dynamically-encoding-a-password
访问此页面http://symfony.com/doc/current/book/security.html以充分了解symfony2安全性的工作原理。
解决方案:
我所做错的是数据库表,因为我将密码字段设置为varchar(25)
,并且不能完全插入散列密码。我把它改成了varchar(255)
,现在一切都好了。每个用户现在都可以登录