web-dev-qa-db-ja.com

Symfony2アプリをデプロイするとfosuserbundleエラーが発生する

同じ仕様の別のコンピューターにSymfonyプロジェクトをインストールしましたが、fosuserbundleでログインすると次のエラーが表示されます。

Authentication request could not be processed due to a system problem.

App/logsファイルに関心のあるものが見つかりません。アプリを開発モードで実行します。手動とコンソールの両方からキャッシュをクリアしました。 doctrine:database:createを使用してデータベースを設定します。 fos:user:createで新しいユーザーを作成するために機能し、データベースに正常に保存されます。

ここからどこへ行けばいいのかわからない。

14
estrar

データベースが最新であることを確認してください。これにより、このエラーを受け取ったときの問題が修正されました。

php app/console doctrine:schema:update --dump-sql

編集:スペル

26
J-who

開発環境での作業中に同じ問題が発生しました。ユーザーのモデルを更新しましたが、ログインしようとするたびにエラーが発生しました。実行することで解決:

app/console cache:clear

編集:同じ問題が再び発生しました。今回は、プロジェクトを別のサーバーに移動し、更新を忘れたために発生しましたparameters.ymlサーバーのMySQL資格情報と一致します。

5
Bob

エラーのようです:

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

は一般的すぎて、問題がどこにあるかについては何も教えてくれません(この問題に関して開かれた問題があります ここ )。

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

私の特定のケースでは、データベースに関するparameters.ymlに間違ったパラメーターがありました。

2
Francesco Borzi

parameters.ymlに間違ったパスワードを設定した可能性があります。そのため、DBに接続できない可能性があります。上記のエラーは、アプリがDBに接続して、ユーザーが本物かどうかを確認できない場合に発生します。 (私も同じエラーに直面しました、そしてこれは私の問題でした、それが役立つことを願っています)

1

デプロイプロセスでは、通常、環境の問題です(アプリが開発ステーションで正常に動作すると仮定します)。 FOSUserBundleそれは素晴らしいですが、何らかの理由でその背後にある問題をあまりよく示していません。

エラーメッセージにあるように、「システムの問題のために..を処理できませんでした。」

キャッシュのクリーンアップやスキーマの更新が機能する場合は、FOSUserBundleをバイパスして(通常、問題はコード/構成とサーバー環境の間にあります)、デフォルトのエラーハンドラーとロガーを使用してバンドルに問題を通知させることをお勧めします。

私の場合、それはドライバーの問題でした。 (pdoをインストールします)

それをバイパスするには、最も簡単な方法は、security.ymlのcontroller_actionからセキュリティを削除することです。

access_control:
{ path: ^/SomeCRUD, role: IS_AUTHENTICATED_ANONYMOUSLY }

次に、それにアクセスすると、問題をログに記録でき、修正できるはずです。

それが役に立てば幸い

1
Jonos

Symfony 2.3に問題があり、app/console doctrine:schema:update --dump-sqlを実行すると、これが結果になります。

DROP INDEX UNIQ_957A647992FC23A8 ON fos_user; DROP INDEX UNIQ_957A6479A0D96FBF ON fos_user; ALTER TABLE fos_user DROPユーザー名、DROP username_canonical、DROPメール、DROP email_canonical、DROP有効、DROPソルト、DROPパスワード、DROP last_login、DROPロック、DROP期限切れ、DROP expires_at、DROP確認トークン、DROP password_requested_at、DROPロール、DROPcredentials_expired、DROP資格情報;

Doctrine-bundleを1.2から1.3に更新した直後に、再び機能し始めました。

情報:

https://github.com/FriendsOfSymfony/FOSUserBundle/issues/214

0
maccevedor

ユーザーエンティティが serInterface を実装していることを確認してください

<?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;
    }
}
0
Nezar Fadle

私はまったく同じ問題を抱えていました。そして、私が取った手順は次のとおりです。

  1. キャッシュをクリアしました
  2. すべてのデータベーステーブルを停止し、移行によってそれらを再作成しました
  3. 制約メソッドへの引数のエンティティアノテーションで一重引用符( ')を使用していた場所を二重引用符( ")に置き換えました

    //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;
    ?>
    

これを行った後、認証を再試行しましたが、機能しました。

0
king

Doctrine:database:createを使用してデータベースを生成した場合は、文字セットが適切でない可能性があります。ユーザーテーブルにはシリアル化されたフィールド(ロール)があるため、間違ったエンコーディングが原因である可能性があります。

これは、アプリ/ログとデータベースの照合順序を調べて確認できます。

または、チェックしてください この回答

0
ncastro

私も同じ問題を抱えていました。データベースを構築してphp app/console doctrine:schema:update --force; php app/console doctrine:fixtures:load;を入力することはできましたが、symfonyアプリはデータベースにアクセスできませんでした。

問題は、database_Host: 127.0.0.1parameters.ymlに設定したのですが、mysqllocalhostを介して接続することを期待していました。 parameters.ymlを更新すると、問題が修正されました。コマンドラインが機能した理由についてはまだ混乱しています...

0
jxmallett