Я делаю сайт Symfony2, но у меня возникли проблемы с выполнением пользовательской аутентификации. Форма регистрации работает отлично, но когда я пытаюсь войти в систему, я получил ошибку «Bad credentials».Плохие учетные данные в Symfony2
Конечно, я проверил поля своей базы данных и установил их на 255 символов для хэша sha512. Я даже пытался хранить пароль в текстовом виде, но я получил ту же ошибку.
Я использую Symfony 2.6.4 и PHP 5.5.14, работающие на Mac OS. Я не нашел ничего, что работает для меня на веб-сайте или на этом форуме, так что я надеюсь, что вы собираетесь найти то, что проблема здесь:/
Вот мой код:
#app/config/security.yml
security:
encoders:
Pass10\PersonBundle\Entity\Person: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
providers:
person:
entity: { class: Pass10PersonBundle:Person, property: username }
firewalls:
secured_area:
pattern: ^/user
provider: person
anonymous: true
form_login:
login_path: /user/login
check_path: /user/login_check
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
Файл маршрутизации:
#src/pass10/PersonBundle/Resources/Config/routing.yml
pass10_person_login:
path: /login
defaults: { _controller: Pass10PersonBundle:Person:login }
pass10_person_login_check:
path: /login_check
pass10_person_logout:
path: /logout
defaults: { _controller: Pass10PersonBundle:Person:logout }
pass10_person_signup:
path: /signup
defaults: { _controller: Pass10PersonBundle:Person:signup }
И объект пользователя (я просто показать соответствующий код):
/**
* Pass10\PersonBundle\Entity\Person
*
* @ORM\Table(name="person")
* @ORM\Entity(repositoryClass="Pass10\PersonBundle\Entity\PersonRepository")
*/
class Person implements UserInterface, \Serializable
{
/**
* @ORM\Column(type="string", length=30, unique=true)
*/
private $username;
/**
* @ORM\Column(type="string", length=100)
*/
private $salt;
/**
* @ORM\Column(type="string", length=255)
*/
private $password;
public function __construct()
{
$this->isActive = true;
$this->salt = md5(uniqid(null, true));
$this->createdAt = date_create(date('Y-m-d H:i:s'));
}
/**
* @inheritDoc
*/
public function getUsername()
{
return $this->username;
}
/**
* @inheritDoc
*/
public function getSalt()
{
return $this->salt;
}
/**
* @inheritDoc
*/
public function getRoles()
{
return array('ROLE_USER');
}
/**
* @inheritDoc
*/
public function eraseCredentials()
{
}
/**
* @see \Serializable::serialize()
*/
public function serialize()
{
return serialize(array(
$this->id,
));
}
/**
* @see \Serializable::unserialize()
*/
public function unserialize($serialized)
{
list (
$this->id,
) = unserialize($serialized);
}
/**
* Set password
*
* @param string $password
* @return Person
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
}
И вот Код сохраняющиеся пользователь:
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($person);
$password = $encoder->encodePassword($person->getPassword(), $person->getSalt());
$person->setPassword($password);
$em = $this->getDoctrine()->getManager();
$em->persist($person);
$em->flush();
loginAction в контроллере:
public function loginAction(Request $request){
$session = $request->getSession();
// get the login error if there is one
if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(Security::AUTHENTICATION_ERROR);
} else {
$error = $session->get(Security::AUTHENTICATION_ERROR);
$session->remove(Security::AUTHENTICATION_ERROR);
}
$person = new Person();
$form = $this->createForm('login', $person);
return $this->render('Pass10PersonBundle:Person:login.html.twig', array(
'form' => $form->createView(),
// last username entered by the user
'last_username' => $session->get(Security::LAST_USERNAME),
'error' => $error,
));
}
И вид
{% extends '::base.html.twig' %}
{% block main_content %}
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
{{ form(form, {'action': path('pass10_person_login_check')}) }}
{% endblock %}
Это много кода. Чтобы получить лучший и быстрый ответ, можете ли вы разбить его на то, что, по вашему мнению, является соответствующим кодом? – rfornal
Конечно, он обновляется! – Off
вы можете поделиться своим видом входа и действиями входа в систему – Baig