1

私はSymfony1.2.7とsfGuardUserプラグインを使用しています。すべてのページを表示し、ログインしてログアウトすることができます。しかし、オブジェクトを編集(フォームに移動するだけ)または更新(変更を保存する)しようとすると、認証の問題が発生することがあり、symfonyはフォームの編集ページに再度リダイレクトします。それが私を夢中にさせているので、私は時々いくつかの強調を付けます:)

ユーザーはCookieとremember_cookieを持っています。サブドメインを使用しているため、両方のCookieにCookieドメイン「.domain.com」を使用しています。

filters.ymlには、次のものがあります。

security: ~

remember:
  class:   sfGuardBasicSecurityFilter

そのフィルターは多くの人が使用しているものです:

class sfGuardBasicSecurityFilter extends sfFilter
{
  public function execute ($filterChain)
  {
    if ($this->isFirstCall() && !$this->getContext()->getUser()->isAuthenticated())
    {
      if ($cookie = $this->getContext()->getRequest()->getCookie(sfConfig::get('app_sf_guard_plugin_remember_cookie_name', 'sfRemember')))
      {
        $q = Doctrine_Query::create()
              ->from('sfGuardRememberKey r')
              ->innerJoin('r.sfGuardUser u')
              ->where('r.remember_key = ?', $cookie);

        if ($q->count())
        {
          $this->getContext()->getUser()->signIn($q->fetchOne()->sfGuardUser);
        }
      }
    }

    $filterChain->execute();
  }
}

module / config/security.yml上

edit:
  is_secure:   on

update:
  is_secure:   on

httpヘッダーを見ると、HTTP302の答えが返ってきます。そのリダイレクトを引き起こすコードを見ると、編集または更新アクションの直前に、ユーザーを認識していないように見えることに気づきました。

Jul 08 19:03:15 symfony [info] {sfFilterChain} Executing filter "sfBasicSecurityFilter"
Jul 08 19:03:15 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter"
Jul 08 19:03:15 symfony [info] {sfFilterChain} Executing filter "sfGuardBasicSecurityFilter"
Jul 08 19:03:15 symfony [info] {sfDoctrineLogger} executeQuery : SELECT COUNT(*) AS num_results FROM (SELECT s.id, s.ip_address FROM sf_guard_remember_key s ...
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : SELECT s.id AS s__id, s.user_id AS s__user_id, s.remember_key AS s__remember_key, s.ip_address ...
Jul 08 19:03:16 symfony [info] {myUser} User is authenticated
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : SELECT s.id AS s__id, s.name AS s__name, s.description AS s__description, s.created_at AS ....
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : SELECT s.id AS s__id, s.name AS s__name, s.description AS s__description, s.created_at AS ....
Jul 08 19:03:16 symfony [info] {myUser} Add credential(s) ""
Jul 08 19:03:16 symfony [info] {sfDoctrineLogger} executeQuery : UPDATE sf_guard_user SET last_login = ?, updated_at = ? WHERE id = ? - (...
Jul 08 19:03:16 symfony [info] {sfFilterChain} Executing filter "subdomainFilter"

どこを見続けることができるか、またはどのように修正できるかについてのアイデアはありますか?

どうもありがとう!

4

2 に答える 2

1

ねえ、私はsymfony1.4で非常によく似た何かに苦しんでいました。

基本的に何が起こっていたのかというと、アプリにログインしてから、ページを操作しようとすると突然ログインページにリダイレクトされていました。私の開発マシンでは物事がうまく機能したので、これは本当に奇妙でした。ホストサーバーでコードがログインし、ページを更新したり、アクションを実行しようとすると、ログイン画面にリダイレクトされます。数回更新すると、到達しようとしていたリソースがポップアップし、消えたり消えたりしました。それはとても奇妙で、パターンもありませんでした。あなたの投稿を読むまで、私はそれを理解することができませんでした。次に、ホスティング会社に電話して、何らかの負荷分散を行っているかどうか、およびサーバー間でセッション情報を適切に共有しているかどうかを確認しました。

どうやら彼らはセッションパスを台無しにしていたので、私のリクエストのいくつかはセッションがどのようなものか見当がつかないサーバーに送られていました-それらは私をログイン画面にリダイレクトしました-元のサーバーは適切なセッションパスを持っていたので、彼らが私のサービスを提供するとき要求、物事は再び正常に動作します。乾杯、

于 2010-12-24T00:32:51.693 に答える
0

修正されました。2台のサーバーが同時に実行されているという問題がありました。Cookieの保存にMemcacheを使用するように変更しました。

于 2010-07-09T11:03:58.850 に答える