Ответ 1
Убедитесь, что ваша база данных обновлена. Это устранило мою проблему, когда я получил эту ошибку.
php app/console doctrine:schema:update --dump-sql
edit: правописание
Я установил проект Symfony на другой компьютер с теми же спецификациями, и я получаю следующую ошибку при входе в систему с помощью fosuserbundle:
Authentication request could not be processed due to a system problem.
Я не могу найти ничего интересного в файлах приложений/журналов. Я запускаю приложение в режиме dev. Очистил кеш как вручную, так и с консоли. Я устанавливаю db с помощью doctrine: database: create. Он работает для создания нового пользователя с fos:user:create
и он успешно сохраняется в базе данных.
Я не знаю, куда идти отсюда.
Убедитесь, что ваша база данных обновлена. Это устранило мою проблему, когда я получил эту ошибку.
php app/console doctrine:schema:update --dump-sql
edit: правописание
Имел ту же проблему при работе в среде dev. Я обновил модель User, и каждый раз, когда я пытался войти в систему, у меня была ваша ошибка. Решено:
app/console cache:clear
РЕДАКТИРОВАТЬ: Была ли та же проблема снова. На этот раз это произошло, потому что я перенес проект на другой сервер и забыл обновить parameters.yml
, чтобы соответствовать учетным данным сервера MySQL.
Похоже, что ошибка:
Запрос на аутентификацию не может быть обработан из-за системной проблемы.
является слишком общим и ничего не говорит о том, где проблема (есть проблема, открытая по этому вопросу здесь).
Я решил свою проблему, проверив журналы и посмотрев, что произошло (в var/logs/dev.log
), надеясь, что это поможет кому-то.
В моем конкретном случае был неправильный параметр в параметрах .yml о базе данных.
Возможно, вы указали неверный пароль в своем parameters.yml
, из-за которого он, возможно, не сможет подключиться к БД.
Вышеупомянутая ошибка возникает, когда приложение не может подключиться к БД для проверки подлинности пользователя.
(Я также столкнулся с такой же ошибкой, и это была моя проблема, надеюсь, что это поможет)
В процессе развертывания обычно возникает проблема с окружением (при условии, что приложение отлично работает в dev-станции). FOSUserBundle это здорово, но по какой-то причине он не очень хорошо показывает проблемы, стоящие за ним.
Как говорится в сообщении об ошибке: ".. невозможно обработать из-за проблемы .
если очистка кеша или обновление работы схемы, я бы порекомендовал попробовать обойти FOSUserBundle (обычно это проблема между вашим кодом/конфигурацией и серверной средой), и пусть ваш пакет с ошибкой по умолчанию и регистратором сообщает о любых проблемах.
в моем случае это была проблема с драйвером. (установить pdo)
чтобы обойти его, самый простой способ - удалить защиту в control_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;
, но приложение symfony не могло получить доступ к базе данных.
Проблема заключалась в том, что я установил database_host: 127.0.0.1
в parameters.yml
, но mysql
ожидал, что я подключусь через localhost
. Обновление parameters.yml
исправило проблему. Я все еще смущен, почему работа командной строки работала...
У меня была такая же проблема. Я сделал следующие шаги:
Я заменил, где я использовал одинарные кавычки (') с двойными кавычками (") в аннотациях объектов для аргументов методов ограничения
//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