Запрос аутентификации Symfony4 не может быть обработан из-за системной проблемы - PullRequest
1 голос
/ 09 июля 2019

Я сейчас обнаруживаю symfony. Я пытаюсь закодировать какую-то учетную запись пользователя. Есть две роли: ADMIN_ROLE или USER_ROLE. Когда я пытаюсь подключить учетную запись, у меня появляется это сообщение «Запрос аутентификации не может быть обработан из-за системной проблемы. »Даже если я введу неправильное имя пользователя / пароль! Я искал решение в течение нескольких дней (в документах и ​​в Интернете).

Я могу заполнить свою базу данных моим пользователем благодаря этому приспособлению (я вижу это в SQLyog). Я попытался стереть ма базу данных, чтобы создать ее снова.

Это мой security.yaml:

# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
    # used to reload user from session & other features (e.g. switch_user)
    app_user_provider:
        entity:
            class: App\Entity\User
            property: username
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        anonymous: ~

        form_login:
            login_path: login
            check_path: login

        logout:
            path: app_logout

        # activate different ways to authenticate
        # https://symfony.com/doc/current/security.html#firewalls-authentication

        # https://symfony.com/doc/current/security/impersonating_user.html
        # switch_user: true

# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY  }
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/, roles: ROLE_USER }


Это мои UtilisateurFixtures (для создания ложных данных)

<?php
namespace App\DataFixtures;
use App\Entity\Utilisateur;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Core\User\User;
//use Symfony\Bridge\Doctrine\Tests\Fixtures\User;
class UtilisateurFixtures extends Fixture
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;

public function __construct(UserPasswordEncoderInterface $encoder)
{
    $this->encoder = $encoder;
}

public function load(ObjectManager $manager)
{

    $user = new Utilisateur();
    $user->setUsername('demo3');
    $user->setPassword($this->encoder->encodePassword($user,'demo3'));
    $user->setRoles(['ROLE_USER', 'ROLE_ADMIN']);
    $manager->persist($user);

    $manager->flush();
}
}

Это мой SecurityController:

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="login")
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
    return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}

/**
 * @Route("/logout", name="app_logout", methods={"GET"})
 */
public function logout()
{
    // controller can be blank: it will never be executed!
    throw new \Exception('Don\'t forget to activate logout in security.yaml');
}
}

Это мой Utilisateur.php:

<?php
namespace App\DataFixtures;
use App\Entity\Utilisateur;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Core\User\User;
//use Symfony\Bridge\Doctrine\Tests\Fixtures\User;
class UtilisateurFixtures extends Fixture
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;

public function __construct(UserPasswordEncoderInterface $encoder)
{
    $this->encoder = $encoder;
}

public function load(ObjectManager $manager)
{

    $user = new Utilisateur();
    $user->setUsername('demo3');
    $user->setPassword($this->encoder->encodePassword($user,'demo3'));
    $user->setRoles(['ROLE_USER', 'ROLE_ADMIN']);
    $manager->persist($user);

    $manager->flush();
}
}

Это мой login.htlml.twig (там, где есть моя форма):

{% extends 'base.html.twig' %}
{% block title %}Log in!{% endblock %}
{% block body %}{% if error %}
{{ error.messageKey|trans(error.messageData, 'security') }}
{% endif %}
<form action="{{ path('login') }}" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="_username" value="{{ last_username }}" />

    <label for="password">Password:</label>
    <input type="password" id="password" name="_password" />

    <input type="hidden" name="_target_path" value="/" />

    {#
        If you want to control the URL the user
        is redirected to on success (more details below)
        <input type="hidden" name="_target_path" value="/account" />
    #}

    <button type="submit">login</button>
</form>
{% endblock %}

Это UtilisateurRepository:

<?php
namespace App\Repository;
use App\Entity\Utilisateur;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
•   @method Utilisateur|null find($id, $lockMode = null, $lockVersion = null)
•   @method Utilisateur|null findOneBy(array $criteria, array $orderBy = null)
•   @method Utilisateur[] findAll()
•   @method Utilisateur[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class UtilisateurRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Utilisateur::class);
}
// /**
// * @return Utilisateur[] Returns an array of Utilisateur objects
// /
/
public function findByExampleField($value)
{
return $this->createQueryBuilder('u')
->andWhere('u.exampleField = :val')
->setParameter('val', $value)
->orderBy('u.id', 'ASC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
*/
/*
public function findOneBySomeField($value): ?Utilisateur
{
return $this->createQueryBuilder('u')
->andWhere('u.exampleField = :val')
->setParameter('val', $value)
->getQuery()
->getOneOrNullResult()
;
}
*/
}

Спасибо за вашу помощь! Не стесняйтесь, если вам что-то нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...