2016-02-23 21 views
5

Güvenli bir rota var ise, aşağıdan panel gibi söyleyelim, Symfony sadece giriş yapmış kullanıcılara erişime izin verecek. Her zaman (Ben FOSUserBundle kullanıyorum) login_path onları yönlendirir içinde yapmadınız kullanıcılar içinSymfony security redirect giriş sayfasına git

- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/panel, role: ROLE_USER } 

:

Ben devre dışı bırakmak veya bu yönlendirme geçersiz kılabilir
security: 
    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       login_path:  fos_user_security_login 

? Kullanıcıyı yönlendirmeden doğrudan giriş formunu göstermek istiyorum.

AccessDeniedHandlerInterface ile ilgili olması gerektiğine inanıyorum, ancak security.yml'de hangi anahtarın üzerine yazılması gerekiyor? Ve varsayılan uygulama nerede?

Diğer durumlar için, DefaultLogoutSuccessHandler, DefaultAuthenticationFailureHandler, DefaultAuthenticationSuccessHandler adresimiz vardır ve bu durumların her biri için ilgili arabirimleri genişleten ve durumu özel bir şekilde ele alan bir hizmet uygulayabiliriz. Yine de AccessDenied için hiçbir şey bulamıyorum. Its directory sadece arabirimi içerir.

+2

Yarar nedir? Oturum açtıktan sonra kullanıcı yeniden/panel'e yönlendirilecek ve farklı hissettirmeyecek - ne eksik durumdayım? – ccKep

+0

Birkaç rotada bir giriş sayfası eklemek istiyorum. Kullanıcı sayfaya erişmek istiyor ama giriş yapmamıştı, ben de ona giriş formunu takdim ettim ve giriş yaptıktan sonra (ajax ile) panele yönlendiriliyor. –

+0

bir giriş formu göstermek için anonim erişime izin vermelisiniz. Yani bir denetleyicide izninizi kontrol edin, örneğin – Heah

cevap

3

Bunu manuel olarak yapardım.

anonim ederek rota erişilebilir olmasını sağlayın:

Şablonunuzda
- { path: ^/panel, role: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] } 

, bir kullanıcı oturum olup olmadığını kontrol edin:

{% if app.user is null %} 
    <!-- Then display your login form --> 
{% else %} 
    <!-- Display the normal view --> 
{% endif %} 

Ya denetleyicisinden bunu:

if (!is_object($this->get('security.token_storage')->getToken()->getUser())) { 
    // Render the login form 
} 

Bunun gibi, mantığınızı kullanıcının kimlik doğrulamasına bağlı olarak yapabilirsiniz.

+0

Kullanıcının panel sayfasına erişmek istediğini ve giriş formunu (ajax ile alınmış ve onaylanmış) görüntülediğim bir sayfaya yönlendirildiği göz önüne alınırsa, giriş yaptıktan sonra kullanıcıyı yeniden yönlendiren sayfayı nasıl öğrenebilirim (bu örnekte) ve kullanıcının başlangıçta giriş yapmak isteyip istemediğini nasıl öğrenirim (oturum açma formu bir moddur ve içerik ajax ile alınır)? –

+0

Sorunuzda, kullanıcıyı yeniden yönlendirmek istemediğinizi, sadece giriş formunu görüntülediğinizi söylüyorsunuz. Kullanıcınızın hangi sayfaya erişmeye çalıştığını bilmek için, 'app.request.headers.get (' referer ')' sözcüğünü twig veya '$ this-> getRequest() -> headers-> get (' referer ') 'komutundan kullanın. . Daha sonra, giriş yaptıktan sonra yönlendiriciye yönlendirmek istiyorsanız, form alanı olarak bir '_target_path 'ekleyin, alınan başvuru metniyle doldurun ve formunuzu işleyen yöntemde yeniden yönlendirme yapın (formunuz FOSUser,' _target_path tarafından işleniyorsa 'otomatik olarak kullanılacaktır. Bir örneğe ihtiyacınız varsa hızlı bir düzenleme yapabilirim. – chalasr

+0

İyi fikir, yapacak. –

İlgili konular