2010-07-08 2 views
1

Symfony 1.2.7 및 sfGuardUser 플러그인을 사용하고 있습니다. 모든 페이지, 로그인 및 로그 아웃을 볼 수 있습니다. 그러나 (폼으로 가거나) 오브젝트를 수정 (변경 사항 저장)하려고 할 때 가끔 나는 인증에 문제가 있으며 symfony가 편집 폼 페이지로 다시 리다이렉트합니다. 때로는에 몇 가지 강조를 달았 기 때문에 그것이 나를 미치게 만들었습니다.sfGuarduser의 인증 문제 (보안 필터) symfony

사용자는 쿠키와 remember_cookie를 가지고 있습니다. 하위 도메인과 작업하기 때문에 두 쿠키 모두에 대해 쿠키 도메인 ".domain.com"을 사용하고 있습니다.

filters.yml에서

I는 다음 가지고

많은 필터에 의해 사용되는 하나
security: ~ 

remember: 
    class: sfGuardBasicSecurityFilter 

: 모듈/구성/security.yml

edit: 
    is_secure: on 

update: 
    is_secure: on 
에서

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(); 
    } 
} 

http 헤더를 보면 HTTP 302 응답이 반환됩니다. 리디렉션을 유발하는 코드를 보면 나는 것 같다 것으로 나타났습니다 그냥 사용자를 인식하지 못하는 편집 또는 업데이트 행동 이전 :

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" 

내가 계속 찾고하거나 내가 그것을 고칠 수있는 방법 위치에 대한 어떤 생각?

고맙습니다.

+0

안녕하세요, 어떻게 sfguard 쿠키 도메인을 변경 하시겠습니까? 제발,이 스레드에있는 질문을 참조하십시오 : http://stackoverflow.com/questions/19452914/symfony-sfguarduser-single-authentication-on-several-subdomains – flm

답변

0

고정되어 있기 때문에 동시에 두 개의 서버가 실행되는 문제가있었습니다. 우리는 쿠키 저장을 위해 Memcache를 사용하도록 변경했습니다.

1

안녕하세요, 심포니 1.4와 비슷한 점이있었습니다.

기본적으로 내 앱에 로그인 한 다음 페이지와 상호 작용을 시도했을 때 갑자기 로그인 페이지로 리디렉션된다는 것이 었습니다. 이것은 정말 이상한 일이었습니다. 왜냐하면 내 dev 컴퓨터에서는 정상적으로 작동했기 때문입니다. 호스트 서버에서 내 코드가 나를 로그인 한 다음 페이지를 새로 고치거나 조치를 취하려고하면 로그인 화면으로 리디렉션됩니다. 몇 번 새로 고침하여 리소스에 팝업을 켰다가 사라지도록했습니다. 그것은 매우 이상했고 패턴이 없었습니다. 나는 당신의 글을 읽을 때까지 그것을 이해할 수 없었습니다. 그런 다음 호스팅 회사를 방문하여 일종의로드 균형 조정을하고 있는지, 서버간에 세션 정보를 적절하게 공유하고 있는지 확인했습니다.

분명히 그들은 세션 경로를 엉망으로 만들었습니다. 그래서 내 요청 중 일부는 세션이 어떤 것인지 전혀 알지 못하는 서버 (예 : 로그인 화면으로 리디렉션 된 서버)로 이동했습니다. 원래 서버는 적절한 세션 경로를 가지고있었습니다. 그들은 내 요청에 대한 서비스를 제공 할 것이고, 다시 정상적으로 작동 할 것입니다. 건배,