Развертывание приложения Symfony2 с ошибками fosuserbundle

Я установил свой проект Symfony на другом компьютере с теми же спецификациями, и я получаю следующую ошибку при входе в систему с помощью fosuserbundle:

Authentication request could not be processed due to a system problem.

Я не могу найти ничего интересного в файлах приложений / журналов. Я запускаю приложение в режиме dev. Очистил кеш как вручную, так и с консоли. Я устанавливаю db с помощью doctrine: database: create. Он работает для создания нового пользователя с fos:user:create и он успешно сохраняется в базе данных.

Я понятия не имею, куда идти отсюда.

Solutions Collecting From Web of "Развертывание приложения Symfony2 с ошибками fosuserbundle"

Убедитесь, что ваша база данных обновлена. Это устранило мою проблему, когда я получил эту ошибку.

 php app/console doctrine:schema:update --dump-sql 

редактировать: правописание

Имел ту же проблему во время работы в среде dev. Я обновил модель моего пользователя, и каждый раз, когда я пытался войти в систему, у меня была ваша ошибка. Решено:

 app/console cache:clear 

EDIT: Если бы та же проблема снова. На этот раз это произошло, потому что я перенес свой проект на другой сервер и забыл обновить parameters.yml чтобы соответствовать parameters.yml данным MySQL сервера.

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

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

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

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

В моем конкретном случае был неправильный параметр в параметрах.yml о базе данных.

Возможно, вы указали неверный пароль в parameters.yml из-за которого он не сможет подключиться к БД. Вышеупомянутая ошибка возникает, когда приложение не может подключиться к БД для проверки подлинности пользователя. (Я также столкнулся с такой же ошибкой, и это была моя проблема, надеюсь, что это поможет)

В процессе развертывания обычно это проблема среды (предполагая, что приложение отлично работает в dev-станции). FOSUserBundle это здорово, но по какой-то причине он не очень хорошо показывает проблемы, стоящие за ним.

Как говорится в сообщении об ошибке: «.. невозможно обработать из-за системной проблемы ».

если вы очищаете кеш или обновляете схему, я бы рекомендовал попробовать обойти FOSUserBundle (обычно это проблема между вашим кодом / конфигурацией и серверной средой), и пусть ваш пакет с ошибкой по умолчанию и регистратором сообщает о любых проблемах.

в моем случае это была проблема с драйвером. (установить pdo)

чтобы обойти его, самый простой способ – удалить защиту контроллера_action в security.yml

 access_control: { path: ^/SomeCRUD, role: IS_AUTHENTICATED_ANONYMOUSLY } 

то при доступе к нему он должен иметь возможность регистрировать проблему, и вы сможете ее исправить.

Надеюсь, поможет

Убедитесь, что пользовательский объект реализует UserInterface

 <?php namespace UserBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Security\Core\User\UserInterface; /** * BaseUser */ class BaseUser implements UserInterface { /** * @var integer */ protected $id; /** * @var string */ protected $name; /** * @var string */ protected $username; /** * @var string */ protected $password; /** * @var string */ protected $email; /** * @var string * */ protected $roles; /** * @var boolean */ protected $isActive; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return BaseUser */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set username * * @param string $username * @return BaseUser */ public function setUsername($username) { $this->username = $username; return $this; } /** * Get username * * @return string */ public function getUsername() { return $this->username; } /** * Set password * * @param string $password * @return BaseUser */ public function setPassword($password) { if (!is_null($password)) { $this->password = $password; } return $this; } /** * Get password * * @return string */ public function getPassword() { return $this->password; } /** * Set email * * @param string $email * @return BaseUser */ public function setEmail($email) { $this->email = $email; return $this; } /** * Get email * * @return string */ public function getEmail() { return $this->email; } /** * Set roles * * * @return BaseUser */ public function setRoles($roles) { $this->roles = $roles; } /** * Get roles */ public function getRoles() { // Do what ever make sense to you here return explode("|", $this->roles) } /** * Set isActive * * @param boolean $isActive * @return BaseUser */ public function setIsActive($isActive) { $this->isActive = $isActive; return $this; } /** * Get isActive * * @return boolean */ public function getIsActive() { return $this->isActive; } public function eraseCredentials() { } public function getSalt() { return null; } } 

Если вы создали базу данных с помощью doctrine: database: create, возможно, ваша кодировка не подходит. Поскольку таблица User имеет сериализованное поле (роли), причиной может быть неправильная кодировка.

Вы можете проверить это, глядя на приложение / журналы и сортировку базы данных.

В качестве альтернативы, проверьте этот ответ

У меня такая же проблема. Я смог создать и заполнить базу данных с помощью php app/console doctrine:schema:update --force; php app/console doctrine:fixtures:load; php app/console doctrine:schema:update --force; php app/console doctrine:fixtures:load; но приложение symfony не могло получить доступ к базе данных.

Проблема в том, что я установил database_host: 127.0.0.1 в parameters.yml но mysql ожидал, что я подключусь через localhost . Обновление parameters.yml устранило проблему. Я все еще смущен, почему работа командной строки работала …

У меня была такая же проблема. И шаги, которые я предпринял, были следующими:

  1. Я очистил кеш
  2. Я сбил все свои таблицы db и снова создал их с помощью моих миграций
  3. Я заменил, где я использовал одинарные кавычки (') с двойными кавычками (") в моих аннотациях объекта для аргументов методам ограничения

    пример

     //src/SomeBundle/Model/user.php <?php /** * * @Assert\File( * maxSize='512k', * mimeTypes={'image/png', 'image/jpeg', 'image/gif'}, * mimeTypesMessage= 'Please upload a valid png, gif or jpeg file below 512Kb' * ) */ private $profilePic; ?> 

    Это было заменено

     <?php /** * * @Assert\File( * maxSize="512k", * mimeTypes={"image/png", "image/jpeg", "image/gif"}, * mimeTypesMessage= "Please upload a valid png, gif or jpeg file below 512Kb" * ) */ private $profilePic; ?> 

Сделав это, я снова попробовал аутентификацию, и это сработало!

У меня была проблема Symfony 2.3, и когда я выполняю доктрину app / console: schema: update –dump-sql, это результат.

DROP INDEX UNIQ_957A647992FC23A8 ON fos_user; DROP INDEX UNIQ_957A6479A0D96FBF ON fos_user; ALTER TABLE fos_user DROP имя пользователя, DROP имя пользователя_канальный, DROP email, DROP email_canonical, DROP enabled, DROP salt, пароль DROP, DROP last_login, DROP заблокирован, DROP expired, DROP expires_at, DROP confirm_token, DROP password_requested_at, роли DROP, DROP credentials_expired, DROP credentials_expire_at ;

Он начал работать снова после того, как я обновил доктрину-пакет от 1.2 до 1.3.

Информация:

https://github.com/FriendsOfSymfony/FOSUserBundle/issues/2140