1

您好,我正在尝试使用 Symfony2 和数据库表登录,密码在 md5 中,没有盐字段。我有很多用户,我无法更改它。

当我发送带有无效电子邮件的表单时,登录似乎工作正常,它返回消息正确“凭据错误”。但是当我发送带有良好电子邮件的表格时,它会显示“提供的密码无效”。

怎么了?

我配置防火墙:

security:
    encoders:
        Usuari\BackendBundle\Entity\Usuari:
            algorithm: md5

在 Usuari 实体中实现 UserInterface,不加盐

    public function getUsername()
    {
        return $this->email;
    }

    public function getSalt() { 
        return '';
    }

    public function getPassword()
    {
        return $this->clau;
    }

    public function getRoles()
    {
        return array('ROLE_ADMIN');
    }

    public function eraseCredentials() { }

    public function equals(UserInterface $user)
    {
        return $this->email === $user->getUsername();
    }

和 /login 路由的安全控制:

namespace Mes\BackendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;


    class SecurityController extends Controller
    {
        public function loginAction()
        {
            $request = $this->getRequest();
            $session = $request->getSession();

            // get the login error if there is one
            if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
            } else {
                $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            }

            return $this->render('MeBackendBundle:Security:login.html.twig', array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error,
            ));
        }
    }
    ?>
4

3 回答 3

3

更改algorithm: sha1algorithm: md5

于 2012-09-26T19:37:36.930 回答
2

我也有类似的情况。我所做的是我创建了单独的编码器,以便旧用户可以使用旧算法登录,而新用户可以使用 symfony 的默认编码器获得更安全的密码。

我在这里发布了一个非常广泛的答案

于 2012-09-26T20:20:17.400 回答
1

Thomas, this solutions seems works fine, but it is more complex.

Finally I decide regenerate all passwords from database with other encode function and salt field. I will send an email to the all users with a link that allows these change his password

于 2012-10-02T23:08:54.123 回答