部署Symfony2应用程序获取fosuserbundle错误

时间:2015-01-25 10:54:04

标签: php symfony fosuserbundle

我已经在另一台具有相同规格的计算机上安装了我的Symfony项目,当我使用fosuserbundle登录时收到以下错误:

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

我在app / logs文件中找不到任何有趣的东西。我以开发模式运行应用程序。手动和从控制台清除缓存。我用doctrine:database:create设置了db。它可以创建一个fos:user:create的新用户,并且已成功保存到数据库中。

我不知道从哪里开始。

10 个答案:

答案 0 :(得分:26)

检查以确保您的数据库是最新的。当我收到此错误时,这解决了我的问题。

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

编辑:拼写

答案 1 :(得分:5)

在开发环境中工作时遇到同样的问题。我更新了用户的模型,每次尝试登录时都会出现错误。通过运行解决:

app/console cache:clear
编辑:再次遇到同样的问题。这次发生的原因是因为我将项目移动到另一台服务器而忘记更新parameters.yml以匹配服务器的MySQL凭据。

答案 2 :(得分:2)

看起来像是错误:

  

由于系统问题,无法处理身份验证请求。

过于通用,并且没有说明问题的位置(关于此事here已经打开了问题)。

我通过查看日志并查看发生了什么(var/logs/dev.log)解决了我的问题,希望这有助于某人。

在我的具体情况中,parameters.yml中有关于数据库的错误参数。

答案 3 :(得分:1)

您可能在parameters.yml中设置了错误的密码,因为密码可能无法连接到数据库。 当应用程序无法连接到数据库以检查用户是否可信时,会出现上述错误。 (我也遇到了同样的错误,这是我的问题,希望有所帮助)

答案 4 :(得分:1)

在部署过程中,通常这是一个环境问题(假设应用程序在开发站中正常工作)。 FOSUserBundle很棒,但出于某种原因,它并没有很好地展示它背后的问题。

正如错误消息所示:“由于系统问题而无法处理..”。

如果清理缓存也不更新架构,我建议尝试绕过FOSUserBundle(通常问题出在你的代码/配置和服务器环境之间),并让你的bundle与默认的errorhandler和logger通知任何问题。 / p> 在我的情况下,这是一个驱动程序问题。 (安装pdo)

绕过它,最简单的方法是删除security.yml中的controller_action的安全性

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

然后,如果您访问它,它应该能够记录问题,您应该能够解决它。

希望有所帮助

答案 5 :(得分:0)

确保您的用户实体实现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;
    }
}

答案 6 :(得分:0)

如果您使用doctrine:database:create生成数据库,可能您的charset不合适。因为User表具有序列化字段(角色),所以可能是错误的编码。

您可以查看app / logs和数据库整理。

或者,选中this answer

答案 7 :(得分:0)

我遇到了同样的问题。我能够使用0123456789abcdefghijklmnopqrstuvwxyz构建和填充数据库,但symfony应用程序无法访问数据库。

问题是我在php app/console doctrine:schema:update --force; php app/console doctrine:fixtures:load;设置了database_host: 127.0.0.1,但parameters.yml期待我通过mysql进行连接。更新localhost修复了问题。我仍然对命令行的工作原理感到困惑......

答案 8 :(得分:0)

我遇到了完全相同的问题。我采取的步骤如下:

  1. 我清除了缓存
  2. 我删除了所有数据库表并通过迁移重新创建它们
  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;
    ?>
    
  4. 执行此操作后,我再次尝试了身份验证,它确实有效!

答案 9 :(得分:0)

我遇到了Symfony 2.3的问题,当我执行app / console doctrine时:schema:update --dump-sql这就是结果。

DROP INDEX UNIQ_957A647992FC23A8 ON fos_user; DROP INDEX UNIQ_957A6479A0D96FBF ON fos_user; ALTER TABLE fos_user DROP用户名,DROP username_canonical,DROP电子邮件,DROP email_canonical,DROP启用,DROP盐,DROP密码,DROP last_login,DROP锁定,DROP过期,DROP expires_at,DROP confirmation_token,DROP password_requested_at,DROP角色,DROP credentials_expired,DROP credentials_expire_at ;

在我将doctrine-bundle从1.2更新到1.3之后,它又开始工作了。

的信息:

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