使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)相关的知识,希望对你有一定的参考价值。

我正在使用Symfony进行项目,并且我一直试图让登录在生产服务器上工作,过去2天没有成功。我一直在收到错误

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

我已按照此处的指南(http://symfony.com/doc/current/cookbook/security/entity_provider.html)设置从数据库加载用户。

我的security.yml文件:

security:
encoders:
    SymfonyComponentSecurityCoreUserUser: plaintext
    AcceptmeUserBundleEntityUser: 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 AppBundleController;

use SymfonyComponentHttpFoundationRequest;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SymfonyBundleFrameworkBundleControllerController;
use SensioBundleFrameworkExtraBundleConfigurationTemplate;
use SensioBundleFrameworkExtraBundleConfigurationSecurity;
use SymfonyComponentSecurityCoreSecurityContext;

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
}
}

我尝试在2个不同的网络主机(FatCow和GoDaddy)上传项目,问题仍然存在。本地我使用PHP 5.4.19(FatCow使用5.3.2,GoDaddy使用5.4.37)。请记住,使用XAMPP在localhost上工作时一切正常!

我已经确认在这两种情况下都启用了PDO。我已经确认参数.yml文件中的数据库用户名,密码和主机是正确的。本地和远程服务器上的错误日志都不显示。

我已经按照上一篇文章Deploying Symfony2 app getting fosuserbundle errors的所有指示,仍然没有成功。

我提前感谢所有的帮助。

答案

它看起来像是错误:

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

是太通用了,并没有告诉问题在哪里(关于这个问题here有一个问题)。

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

在我的特定情况下,parameters.yml中有关于数据库连接的错误参数。但是,同样,错误过于通用,并不一定意味着问题与数据库连接有关。

另一答案

在我的情况下,通过纠正.env文件中的连接细节中的拼写错误来解决该问题。

另一答案

更新:问题已解决。问题是实体php文件中的表以大写字母命名,而数据库表以小写字母命名。 +1到ClémentBERTILLON指向正确的方向,即prod.log

另一答案

这个问题可以修复运行命令:php bin/console cache:clear --env=prod --no-debug

另一答案

AS @ShinDarth提到它。它过于通用,日志检查将帮助我们的人员解决这个问题。

如果它可以帮助我的情况它是:

在SF3中安装SonataUserBundle后,我不得不这样做

bin/console doctrine:schema:update --force

我的上下文是特别的,我之前已经安装并使用过FOSUserBundle来安装SonataUserBundle。 (由于SF3与FOSUser / SonataUSer的兼容性......数据库之后已经进行了16次查询。工作得很好。

另一答案

目前在Symfony和生产IF中存在一个错误,在身份验证系统发生错误时(缺少表,缺少列或任何其他异常) - 它被记录为INFO而不是ERROR,并且默认错误记录选项根本没有记录。

https://github.com/symfony/symfony/pull/28462

我认为现在有两个选项 - 临时记录生产中的所有内容(包括INFO),直到找到真正的错误。

第二个选项:在生产中直接使用此补丁或调试。

另一答案

这个解决方案对我来说是正确的:https://stackoverflow.com/a/39782535/2400373

但是如果您无法访问终端,则可以进入服务器并删除var/cache内的文件夹。

如果您有权访问控制台,则另一种解决方案是键入

#rm -rf var/cache/*

要么

$sudo rm -rf var/cache/*

这个解决方案适用于symfony 3

另一答案

我确定这个错误太通用了。在我的情况下,以下是不正确的:

class: App/Entity/User;

更正:

class: AppEntityUser;
另一答案

另一个可能的原因可能是mysql Server。在我的情况下,我忘了启动MAMP / MySQL服务器和Symfony导致此消息。

另一答案

您可能使用了Symfony docs here提供的模板:

{% if error %}
    <div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}

这实际上给你这个错误信息。解决此问题的最简单可靠的方法是使用以下内容替换此行:

<div class="alert alert-danger">{{ error }}</div>

这将为您提供错误的完整堆栈跟踪,并(希望)帮助您调试应用程序。在开始生产之前别忘了还原它!

以上是关于使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 子域防火墙在生产服务器上被忽略

生产环境中的 Symfony 2 Assetic css 和 js 404

SQL Server由于登录失败无法启动服务

Symfony - 进程运行抛出异常 - 在命令行上执行有效

Laravel 身份验证过滤器在生产服务器上失败

服务器上出现1069错误(由于登录失败而无法启动服务)解决方法