Ошибка входа пользователя на рабочий сервер с использованием инфраструктуры 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>
Это даст вам полную трассировку стека для вашей ошибки и (надеюсь) поможет отладить ваше приложение. Не забудьте отменить это, прежде чем идти в производство!