Я пытаюсь настроить процесс формы в моем новейшем приложении Symfony. Я следил за кулинарной книгой Symfony, но безуспешно.
Я хочу использовать уже существующую базу данных, где поля loginUtil и passUtil couple являются моими требованиями к подключению.
Итак, я установил свой файл security.yml следующим образом:
security:
providers:
main:
entity: Customer\CustomerBundle\Entity\utilisateur
property: loginUtil
encoders:
Customer\CustomerBundle\Entity\utilisateur:
algorithm: sha1
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: /login
check_path: /login_check
logout:
path: /logout
target: home_page
Установите мою сущность, которая реализует интерфейс UserInterface в соответствии с документацией
<?php
namespace Customer\CustomerdBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* utilisateur
*
* @ORM\Table(name = "utilisateur")
* @ORM\Entity(repositoryClass = "Customer\CustomerdBundle\Repository\utilisateurRepository")
*/
class utilisateur implements UserInterface
{
private $username;
private $password;
private $salt;
private $roles;
// declaration of other fields from pre existing database
// setters and getters
// ...
//
public function getRoles()
{
return $this->roles;
}
public function getPassword()
{
$this->password = $this->getPassUtil();
return $this->password;
}
public function getsalt()
{
return $this->salt;
}
public function getusername()
{
return $this->username = $this->getLoginUtil();
}
public function eraseCredentials()
{
}
}
?>
Мой контроллер, который возвращает только мое представление формы:
<?php
namespace Customer\CustomerdBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends Controller
{
public function indexAction()
{
return $this->render('CustomerCustomerBundle:Default:tableLum.html.twig');
}
public function loginAction()
{
return $this->render('CustomerCustomerBundle:Default:formLogin.html.twig');
}
}
Мой routing.yml
homepage:
path: /
defaults: { _controller: CustomerCustomerBundle:Default:index }
login:
path: /login
defaults:
_controller: CustomerCustomerBundle:Default:login
login_check:
path: /login_check
logout:
path: /logout
И моя аутентификационная форма:
{% extends "CustomerCustomerBundle::layout.html.twig" %}
{% block maincontentFormLogin %}
<form action = "{{ path('login_check') }}" method = "post">
<label for = "username">Login :</label>
<input type = "text" id = "username" name = "_username" value = "" />
<br />
<label for = "password">Mot de passe :</label>
<input type = "password" id = "password" name = "_password" />
<br />
<input type = "submit" value = "Connexion" />
</form>
{% endblock %}
Я видел в /var/logs/dev.log, что мое имя пользователя отправлено правильно и запрашивает доктрину, но не пароль, он пуст. Так что логически мои учетные данные плохие.
Кто-нибудь может помешать мне понять, что я делаю неправильно?
@Brent Извините, вопрос обновлен, спасибо






Наконец я нашел решение.
Я пока не понимаю почему. Мне нужно было добавить параметры somme в раздел кодировщиков следующим образом:
encoders:
Customer\CustomerBundle\Entity\utilisateur:
algorithm: sha1
encode_as_base64: false
iterations: 1
Мне нужно задокументировать себя сейчас, чтобы понять, почему.
Спасибо вам, ребята !!
По умолчанию большинство кодировщиков паролей на самом деле циклически повторяют и кодируют пароль сотни или даже тысячи раз, чтобы обеспечить более безопасный хэш. В вашей существующей базе данных используется только один.
Как выглядит ваш контроллер login_check?