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

时间:2015-07-20 15:03:17

标签: php symfony login doctrine

我正在使用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的所有指示,但仍然没有成功。

我提前感谢所有的帮助。

11 个答案:

答案 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文件中连接详细信息中的拼写错误来修复该问题。