Ошибка входа пользователя на рабочий сервер с использованием инфраструктуры Symfony (запрос аутентификации не может быть обработан из-за...)

Я использую Symfony для проекта, и я пытался заставить логин работать на производственном сервере безуспешно в течение последних 2 дней. Я получаю ошибку

Запрос аутентификации не может быть обработан из-за системной проблемы.

Я следовал этому руководству (http://symfony.com/doc/current/cookbook/security/entity_provider.html), чтобы настроить загрузку пользователей из базы данных.

Мой файл security.yml:

security:
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    Acceptme\UserBundle\Entity\User: plaintext
role_hierarchy:
    ROLE_SUPER_ADMIN:   [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    in_memory:
        memory:
            users:
                patricia:
                    password: patricia
                    roles: 'ROLE_ADMIN'
    users:
        name: user_provider
        entity: { class: AcceptmeUserBundle:User, property: username }

firewalls:
    user_area:
        pattern: ^/
        anonymous: ~
        provider: user_provider
        form_login:
            login_path: login_route
            check_path: _login_check
            default_target_path: homepage
    dev:
        pattern: ^/(_(profiler|wdt|error)|css|images|js)/
        security: false

    default:
                anonymous: ~
                http_basic: ~

access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }

Мой SecurityController.php:

namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\Security\Core\SecurityContext;

class SecurityController extends Controller
{
/**
 * @Route("/login", name="login_route")
 * @Template("security/login.html.twig")
 */
public function loginAction(Request $request)
{
    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
    } else {
        $error = $request->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
    }

    return array(
        'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME),
        'error'         => $error,
    );
}

/**
 * @Route("/login_check", name="_login_check")
 */
public function securityCheckAction()
{
    // this controller will not be executed,
    // as the route is handled by the Security system
}
}

Я попытался загрузить проект на 2 разных веб-хостинга (FatCow и GoDaddy), и проблема остается. Локально я использую PHP 5.4.19 (FatCow использует 5.3.2 и GoDaddy использует 5.4.37). Имейте в виду, что при работе на localhost с XAMPP все работает отлично!

Я подтвердил, что PDO включен в обоих случаях. Я подтвердил, что имя пользователя базы данных, пароль и хост указаны правильно в файле parameters.yml. Журналы ошибок на локальных и удаленных серверах ничего не показывают.

Я следовал всем указаниям из этого предыдущего поста Развертывание приложения Symfony2, получая ошибки fosuserbundle и до сих пор безуспешно.

Я ценю всю помощь заранее.

Ответ 1

ОБНОВЛЕНИЕ: проблема решена. Проблема заключалась в том, что таблица в файле php файла была названа с прописными буквами, а таблица базы данных была названа в нижнем регистре. +1 для ClémentBERTILLON для указания в нужном направлении, а именно prod.log

Ответ 2

Похоже, что ошибка:

Запрос на аутентификацию не может быть обработан из-за системной проблемы.

является слишком общим и ничего не говорит о том, где проблема (есть проблема, открытая по этому вопросу здесь).

Я решил свою проблему, проверив журналы и посмотрев, что произошло (в var/logs/dev.log), надеясь, что это поможет кому-то.

В моем конкретном случае был неправильный параметр в параметрах .yml о соединении с базой данных. Но, опять же, ошибка слишком общая и не обязательно означает, что проблема связана с подключением к базе данных.

Ответ 3

Эта проблема может быть исправлена: команда php bin/console cache:clear --env=prod --no-debug

Ответ 4

AS @ShinDarth упоминает об этом. Он слишком общий, и проверка журналов поможет людям в нашем случае получить это.

Если это может помочь в моей ситуации, это было:

После установки SonataUserBundle в SF3 мне пришлось

bin/console doctrine:schema:update --force

Мой контекст в частности, я уже установил и использовал FOSUserBundle, прежде чем устанавливать SonataUserBundle. (Из-за совместимости SF3 с FOSUser/SonataUSer... После этого из базы данных было принято 16 запросов. Отлично работает.

Ответ 5

Это решение мне подходит: fooobar.com/questions/991160/...

Но если у вас нет доступа к терминалу, вы можете войти на сервер и удалить папки, которые находятся внутри var/cache.

Другое решение, если у вас есть доступ к консоли, это набрать

#rm -rf var/cache/*

или же

$sudo rm -rf var/cache/*

это решение работает на Symfony 3

Ответ 6

В настоящее время в Symfony есть ошибка, и в производственном IF во время проверки подлинности возникает системная ошибка (отсутствует таблица, отсутствует столбец или любое другое исключение) - он регистрируется как INFO вместо ОШИБКИ, а с параметрами ведения журнала ошибок по умолчанию он вообще не регистрируется.

https://github.com/symfony/symfony/pull/28462

Я думаю, что сейчас есть два варианта - временно регистрировать все (включая INFO) на производстве, пока не найдете настоящую ошибку.

Второй вариант: использовать этот патч или отлаживать прямо на производстве.

Ответ 7

Я уверен, что эта ошибка слишком общая. В моем случае следующее неверно:

class: App/Entity/User;

Исправление:

class: App\Entity\User;

Ответ 8

В моем случае я изменил сущность пользователя, а затем забыл обновить таблицу.

для обновления таблицы:

php bin/console doctrine:schema:update --force

Ответ 9

В моем случае проблема была исправлена путем исправления опечатки в деталях соединения в файле .env.

Ответ 10

Другой возможной причиной может быть MySQL Server. В моем случае я забыл запустить MAMP/MySQL Server, и Symfony привел к этому сообщению.

Ответ 11

В моем случае произошла ошибка в settings.yml (неверное значение с несуществующим путем к папке)

Ответ 12

Вы, вероятно, использовали шаблон, предоставленный Symfony docs здесь:

{% if error %}
    <div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}

Что на самом деле дает вам это сообщение об ошибке. Самый простой и надежный способ решить эту проблему - заменить эту строку следующим:

<div class="alert alert-danger">{{ error }}</div>

Это даст вам полную трассировку стека для вашей ошибки и (надеюсь) поможет отладить ваше приложение. Не забудьте отменить это, прежде чем идти в производство!