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

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

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

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

Я не знаю, куда идти отсюда.

Ответ 1

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

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

edit: правописание

Ответ 2

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

app/console cache:clear

РЕДАКТИРОВАТЬ: Была ли та же проблема снова. На этот раз это произошло, потому что я перенес проект на другой сервер и забыл обновить parameters.yml, чтобы соответствовать учетным данным сервера MySQL.

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

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

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

надеюсь, что это поможет

Ответ 6

Убедитесь, что пользовательский объект реализует 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;
    }
}

Ответ 7

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

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

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

Ответ 8

У меня была та же проблема. Я смог создать и заполнить базу данных с помощью 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 исправило проблему. Я все еще смущен, почему работа командной строки работала...

Ответ 9

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

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

    Пример

    //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;
    ?>
    

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

Ответ 10

У меня была проблема 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