我已经在另一台具有相同规格的计算机上安装了我的Symfony项目,当我使用fosuserbundle登录时收到以下错误:
Authentication request could not be processed due to a system problem.
我在应用程序/日志文件中找不到任何感兴趣的内容。我在开发模式下运行该应用程序。手动和从控制台清除缓存。我用 doctrine:database:create 设置了数据库。它可以创建一个具有fos:user:create
的新用户,并成功保存到数据库中。
我不知道该何去何从。
检查以确保您的数据库是最新的。当我收到此错误时,这解决了我的问题。
php app/console doctrine:schema:update --dump-sql
编辑:拼写
在开发环境中工作时遇到同样的问题。我更新了我的用户模型,每次我尝试登录时都遇到了您的错误。通过运行解决:
app/console cache:clear
编辑:再次遇到同样的问题。这次发生这种情况是因为我将项目移动到另一台服务器,忘记更新parameters.yml
以匹配服务器的MySQL凭据。
看起来错误:
由于系统问题,无法处理身份验证请求。
太笼统了,没有说明问题出在哪里(这里有一个关于这个问题的问题)。
我通过检查日志并查看发生了什么(var/logs/dev.log
)解决了我的问题,希望这对某人有所帮助。
在我的特定情况下,关于数据库的参数.yml中有一个错误的参数。
您可能在parameters.yml
中设置了错误的密码,因此它可能无法连接到数据库。当应用程序无法连接到数据库以检查用户是否真实时,会发生上述错误。(我也遇到了同样的错误,这是我的问题,希望有帮助)
在部署过程中,通常这是一个环境问题(假设应用在开发工作站中运行良好)。FOSUserBundle 它很棒,但由于某种原因,它并没有很好地显示它背后的问题。
正如错误消息所说:"..由于系统问题,无法处理。
如果清理缓存或更新模式有效,我建议尝试绕过 FOSUserBundle(通常问题出在您的代码/配置和服务器环境之间),并让您的捆绑包与默认错误处理程序和记录器通知任何问题。
就我而言,这是一个驱动程序问题。(安装 PDO)
要绕过它,最简单的方法是将安全性删除到 security.yml 中的controller_action
access_control:
{ path: ^/SomeCRUD, role: IS_AUTHENTICATED_ANONYMOUSLY }
然后,如果您访问它,它应该能够记录问题,您应该能够修复它。
希望对您有所帮助
确保您的用户实体实现用户界面
<?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 生成了数据库,也许你的字符集不合适。由于用户表具有序列化字段(角色),因此可能是错误的编码。
您可以查看应用程序/日志和数据库排序规则。
或者,检查此答案
我遇到了同样的问题。我能够用php app/console doctrine:schema:update --force; php app/console doctrine:fixtures:load;
构建和填充数据库,但symfony应用程序无法访问数据库。
问题是我在parameters.yml
中设置了database_host: 127.0.0.1
,但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的问题,当我执行应用程序/控制台原则:schema:update --dump-sql时,这就是结果。
fos_user上下降指数UNIQ_957A647992FC23A8;fos_user上下降指数UNIQ_957A6479A0D96FBF;更改表fos_user删除用户名,删除username_canonical,删除电子邮件,删除email_canonical,启用删除,删除盐,删除密码,删除last_login,删除锁定,删除过期,删除expires_at,删除confirmation_token,删除password_requested_at,删除角色,删除credentials_expired,删除credentials_expire_at;
在我将教义包从 1.2 更新到 1.3 之后,它又开始工作了。
信息:
https://github.com/FriendsOfSymfony/FOSUserBundle/issues/2140