2016-04-11 41 views
1

Uygulamada, biri istemciler ve bir tanesi yöneticiler için olmak üzere 2 giriş formu vardır.Farklı giriş formları için aynı sağlayıcıyı kullanın

security: 
    providers: 
     form_login: 
      entity: { class: FMP\SecurityBundle\Entity\User, property: username } 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    app_secured_area: 
     pattern: ^/ 
     anonymous: ~ 
     form_login: 
      provider: form_login 
      login_path: security_app_login 
      check_path: security_app_login_check 
      default_target_path:/
     logout: 
      path: security_logout 
      target: security_app_login 

    admin_secured_area: 
      pattern: ^/admin 
      anonymous: ~ 
      form_login: 
       provider: form_login 
       login_path: security_admin_login 
       check_path: security_admin_login_check 
       default_target_path: /admin/ 
      logout: 
       path: security_logout 
       target: security_admin_login 

    default: 
     anonymous: ~ 
     http_basic: ~ 

DefaultController.php: rotayı /admin/login erişebilir ve beni oturum açtığınızda

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/login", name="security_app_login") 
    * @param Request $request 
    * @return \Symfony\Component\HttpFoundation\Response 
    */ 
    public function appLoginAction(Request $request) 
    { 
     return $this->loginAction($request, 'FMPSecurityBundle:Default:app_login.html.twig'); 
    } 

    /** 
     * @Route("/admin/login", name="security_admin_login") 
     * @param Request $request 
     * @return \Symfony\Component\HttpFoundation\Response 
     */ 
     public function adminLoginAction(Request $request) 
     { 
      return $this->loginAction($request, 'FMPSecurityBundle:Default:admin_login.html.twig'); 
     } 

     public function loginAction(Request $request, $template) 
     { 
      $session = $request->getSession(); 

      if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
       $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
      } else { 
       $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
      } 

      return $this->render($template, array(
       'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
       'error'   => $error, 
     )); 
     } 

     /** 
     * @Route("/login_check", name="security_app_login_check") 
     */ 
     public function loginCheckAppAction() 
     { 
      // 
     } 

     /** 
     * @Route("/admin/login_check", name="security_admin_login_check") 
     */ 
     public function loginCheckAdminAction() 
     { 
      // 
     } 

     /** 
     * @Route("/logout", name="security_logout") 
     */ 
     public function logoutAction() 
     { 
      // 
     } 
} 

, aşağıdaki hata döndürülür:

iki biçimde

aynı sağlayıcısı kullanmak

Denetleyici bir yanıt vermelidir (verilen boş değer). Denetleyicinizde bir yere bir iade bildirimi eklemeyi unuttun mu?

Sorun nedir? Aynı sağlayıcıyı farklı formlar için kullanamazsınız?

+0

It çalışmaları ateşler? –

+0

@ FrançoisDupont evet. İstemciler için çalışır (/ login), ancak yöneticiler için (/ admin/login). – Filipe

+0

Bu yönteme girdiğiniz gibi görünüyor: loginCheckAdminAction() ancak erişip erişemeyeceğinizi kontrol eden Symfony güvenlik sistemine girmediniz. Security_app_login_check –

cevap

1

Güvenlik duvarı yapılandırmalarını değiştirmeyi deneyin. size yapılandırmada

admin_secured_area: 
     pattern: ^/admin 
     anonymous: ~ 
     form_login: 
      provider: form_login 
      login_path: security_admin_login 
      check_path: security_admin_login_check 
      default_target_path: /admin/ 
     logout: 
      path: security_logout 
      target: security_admin_login 

app_secured_area: 
    pattern: ^/ 
    anonymous: ~ 
    form_login: 
     provider: form_login 
     login_path: security_app_login 
     check_path: security_app_login_check 
     default_target_path:/
    logout: 
     path: security_logout 
     target: security_app_login 

, hep app_secured_area ve asla admin_secured_area müşterileri için

+0

Çalıştı! Anlamıyorum, şimdi her iki form da çalışıyor. Niye ya? – Filipe

+1

app_secured_area yangınları, çünkü tüm istek için şablon ^/eşleşir. Yani, admin_secured_area daha yeni yangınlar –

1

güvenlik sistemine ve yönetici giriş

DÜZENLEME yeniden yönlendirilmesine işlemek için bu eklemek için yalnızca bir yol olduğundan Sonra müşterilerine daha çeki giriş aynı yolu tutmak o failure_path üzgün

admin_secured_area: 
     pattern: ^/admin 
     anonymous: ~ 
     form_login: 
      provider: form_login 
      login_path: security_admin_login 
      check_path: security_app_login_check 
      failure_path: security_admin_login <----- ADD THIS LINE 
      default_target_path: /admin/ 
     logout: 
      path: security_logout 
      target: security_admin_login 
+0

[Symfony \ Component \ Config \ Tanımı \ İstisna \ InvalidConfigurationException] – Filipe

+0

"security.firewalls.admin_secured_area.form_login" altında Tanınmayan seçenek "access_denied_url" Bu benim hatam, benim düzenleme İşe yaramıyor –

+0

bakmak, yönetici yönlendirilecek devam "kötü kimlik bilgileri" hatası oluştuğunda istemci giriş sayfasına. – Filipe

İlgili konular