Ошибка входа в пользовательскую сущность Symfony2.7

Я использую Symfony 2.7, и у меня возникают проблемы с регистрацией пользователей. Я использую Custom Entity, и я создал пользовательскую сущность «Оператор» с соответствующими переменными и методами. Я использую два метода входа в файл безопасности. Один - in_memory, и я использую его для входа в систему администратора, который работает правильно, а другой - user_db. Я использую алгоритм bcrypt для шифрования паролей. Когда я пытаюсь войти в систему пользователя, он отображает сообщение «Неверные учетные данные». Что я делаю не так? Благодарю вас!

безопасность.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()
{
}

}

Сущность "Оператор" и методы 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;
    }

person Xhens    schedule 02.08.2015    source источник


Ответы (2)


Вероятно, вам не следует использовать password_hash, вы должны использовать кодировщик symfony, который знает, как обрабатывать шифрование пароля. Попробуйте реализовать что-то подобное в своем коде (обычно в контроллере регистров): http://symfony.com/doc/current/book/security.html#dynamically-encoding-a-password

Посетите эту страницу http://symfony.com/doc/current/book/security.html чтобы полностью понять, как работает безопасность symfony2.

person zizoujab    schedule 02.08.2015
comment
Все, что я сделал неправильно, это таблица базы данных, потому что я установил поле пароля как varchar (25), и хешированный пароль не мог быть полностью вставлен. Я изменил его на varchar (255), и теперь все в порядке. Теперь каждый пользователь может войти в систему. - person Xhens; 05.08.2015

Решение:

Все, что я сделал неправильно, это таблица базы данных, потому что я установил поле пароля как varchar(25), и хешированный пароль не мог быть полностью вставлен. Я изменил его на varchar(255), и теперь все в порядке. Теперь каждый пользователь может войти в систему.

person Xhens    schedule 11.04.2016