web-dev-qa-db-ja.com

Symfonyフレームワークを使用した本番サーバーでのユーザーログインの失敗(...が原因で認証リクエストを処理できませんでした)

私はプロジェクトに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
}
}

2つの異なるWebホスト(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 であり、それでも成功しません。

事前にすべての助けに感謝します。

更新:問題は解決しました。問題は、エンティティphpファイルのテーブルに大文字の名前が付けられ、データベーステーブルには小文字の名前が付けられることでした。正しい方向を示すためのClémentBERTILLONへの+1、つまりprod.log

エラーのようです:

システムの問題により、認証要求を処理できませんでした。

汎用的すぎて、どこに問題があるのか​​はわかりません(この問題について未解決の問題があります here )。

ログをチェックして何が起こったかを確認することで問題を解決しました(var/logs/dev.log)、これが誰かの役に立つことを願っています。

私の特定のケースでは、parameters.ymlにデータベース接続に関する誤ったパラメーターがありました。ただし、繰り返しになりますが、エラーは一般的すぎるため、問題がデータベース接続に関連しているとは限りません。

14
Francesco Borzi

この問題は、実行中のコマンドを修正することができます:php bin/console cache:clear --env=prod --no-debug

7
Luis Jimenez

私の場合、ユーザーエンティティを変更した後、テーブルを更新するのを忘れました。

テーブル更新の場合:

php bin/console doctrine:schema:update --force
2
pdchaudhary

AS @ShinDarthが言及しています。それはあまりにも一般的であり、ログ検査は私たちのケースの人々がこれを乗り越えるのを助けるでしょう。

それが私の状況で役立つ場合、それは:

SF3にSonataUserBundleをインストールした後、私は

bin/console doctrine:schema:update --force

私のコンテキストは特別です。SonataUserBundleをインストールする前に、FOSUserBundleをすでにインストールして使用していました。 (SF3はFOSUser/SonataUSerと互換性があるため...データベースはその後16クエリを取得しました。

2
Paul Leclerc

このソリューションは私にとって正しいです: https://stackoverflow.com/a/39782535/240037

ただし、ターミナルにアクセスできない場合は、サーバーに入り、var/cache内のフォルダーを削除できます。

コンソールにアクセスできる別の解決策は、

#rm -rf var/cache/*

または

$Sudo rm -rf var/cache/*

このソリューションはsymfony 3で動作します

1
juanitourquiza

このエラーは一般的すぎると思います。私の場合、以下は正しくありません:

class: App/Entity/User;

補正:

class: App\Entity\User;
1
Yuchen BAI

現在、Symfonyにバグがあり、認証中に本番IFでシステムエラーが発生します(テーブルの欠落、列の欠落、またはその他の例外)-ERRORではなくINFOとしてログに記録され、デフォルトのエラーログオプションではまったくログに記録されません。

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

現在、2つのオプションがあると思います。本当のエラーが見つかるまで、本番環境で(INFOを含む)すべてを一時的にログに記録します。

2番目のオプション:このパッチを使用するか、本番環境で直接デバッグします。

1
CappY

私の場合、問題は.envファイルの接続の詳細のタイプミスを修正することで修正されました。

0
Sanjok Gurung

別の考えられる原因はMySQL Serverです。私の場合、開始するのを忘れたMAMP/MySQL Serverで、Symfonyがこのメッセージを表示しました。

0
Dino

あなたはおそらく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>

これにより、エラーの完全なスタックトレースが得られ、(できれば)アプリケーションのデバッグに役立ちます。本番環境に移行する前に、これを元に戻すことを忘れないでください!

0
gogaz