我正在使用Symfony进行项目,并且我一直试图让登录在生产服务器上工作,但过去2天没有成功。我一直收到错误
由于系统问题,无法处理身份验证请求。
我已按照此处的指南(http://symfony.com/doc/current/cookbook/security/entity_provider.html)设置从数据库加载用户。
我的 security.yml 文件:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Acceptme\UserBundle\Entity\User: plaintext
role_hierarchy:
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
patricia:
password: patricia
roles: 'ROLE_ADMIN'
users:
name: user_provider
entity: { class: AcceptmeUserBundle:User, property: username }
firewalls:
user_area:
pattern: ^/
anonymous: ~
provider: user_provider
form_login:
login_path: login_route
check_path: _login_check
default_target_path: homepage
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
default:
anonymous: ~
http_basic: ~
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
我的 SecurityController.php:
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\Security\Core\SecurityContext;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login_route")
* @Template("security/login.html.twig")
*/
public function loginAction(Request $request)
{
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $request->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error,
);
}
/**
* @Route("/login_check", name="_login_check")
*/
public function securityCheckAction()
{
// this controller will not be executed,
// as the route is handled by the Security system
}
}
我尝试在两个不同的网络主机(FatCow和GoDaddy)上传项目,问题仍然存在。本地我使用PHP 5.4.19(FatCow使用5.3.2,GoDaddy使用5.4.37)。请记住,使用XAMPP在localhost上工作时一切正常!
我已经确认在这两种情况下都启用了PDO。我已经确认 parameters.yml 文件中的数据库用户名,密码和主机是正确的。本地和远程服务器上的错误日志都不显示任何内容。
我已遵循上一篇文章Deploying Symfony2 app getting fosuserbundle errors的所有指示,但仍然没有成功。
我提前感谢所有的帮助。
答案 0 :(得分:14)
看起来像是错误:
由于系统问题,无法处理身份验证请求。
过于通用,并且没有说明问题的位置(关于此事here已经打开了问题)。
我通过查看日志并查看发生了什么(var/logs/dev.log
)解决了我的问题,希望这有助于某人。
在我的具体情况中,parameters.yml中有关于数据库连接的错误参数。但是,同样,错误太通用了,并不一定意味着问题与数据库连接有关。
答案 1 :(得分:9)
更新:问题已解决。问题是实体php文件中的表以大写字母命名,而数据库表以小写字母命名。 +1指向ClémentBERTILLON指向正确的方向,即prod.log
答案 2 :(得分:7)
此问题可修复运行命令:php bin/console cache:clear --env=prod --no-debug
答案 3 :(得分:2)
在我的情况下,我更改了用户实体,然后忘了更新表。
用于表更新:
php bin/console doctrine:schema:update --force
答案 4 :(得分:1)
AS @ShinDarth提到它。它过于通用,日志检查将帮助我们的人员解决这个问题。
如果它对我的情况有帮助,那就是:
在SF3中安装SonataUserBundle之后,我不得不
bin/console doctrine:schema:update --force
我的上下文特别,我之前已经安装并使用过FOSUserBundle来安装SonataUserBundle。 (由于SF3与FOSUser / SonataUSer兼容...... 之后数据库已经进行了16次查询。工作得很好。
答案 5 :(得分:1)
此解决方案对我来说是正确的:https://stackoverflow.com/a/39782535/2400373
但是,如果您无权访问终端,则可以进入服务器并删除var/cache
内的文件夹。
如果您有权访问控制台,另一种解决方法是键入
#rm -rf var/cache/*
或
$sudo rm -rf var/cache/*
此解决方案适用于symfony 3
答案 6 :(得分:1)
当前在Symfony和生产IF中存在一个错误,在身份验证期间会发生系统错误(丢失表,缺少列或任何其他异常)-它以INFO而不是ERROR的形式记录,并且具有默认错误记录选项,它根本不会记录。
https://github.com/symfony/symfony/pull/28462
我认为现在有两个选择-在生产中临时记录所有内容(包括INFO),直到找到真正的错误为止。
第二个选择:使用此补丁或直接在生产环境中调试。
答案 7 :(得分:1)
我确定此错误过于笼统。就我而言,以下内容是不正确的:
class: App/Entity/User;
更正:
class: App\Entity\User;
答案 8 :(得分:0)
另一个可能的原因可能是 MySQL服务器。在我的情况下,我忘了启动 MAMP / MySQL服务器,Symfony产生了这条消息。
答案 9 :(得分:0)
您可能使用了Symfony docs here提供的模板:
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $value["test"]?></td>
<td><?php echo $value["test"]?></td>
<td><?php echo $value["test"]?></td>
<td><?php echo $value["test"]?></td>
<td><?php echo $value["test"]?></td>
</tr>
</tbody>
</table>
</div>
实际上给您此错误消息。解决此问题的最简单,最可靠的方法是用以下方法替换此行:
{% if error %}
<div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
这将为您提供完整的错误堆栈跟踪信息,并(有希望)帮助您调试应用程序。不要忘记在生产之前还原它!
答案 10 :(得分:-1)
在我的情况下,通过更正.env
文件中连接详细信息中的拼写错误来修复该问题。