2014-01-27 4 views
0

시간을 검색하고 실제로 사용자 및 관리자 측 로그인 템플릿을 무시할 수있는 방법을 찾지 못했습니다.FosUserBundle 다른 로그인 페이지

I'v은 지금은 로그인 폼을 만들려면

firewalls: 
    admin: 
     pattern: /admin(.*) 
     form_login: 
     provider: fos_userbundle 
     csrf_provider: form.csrf_provider 
     login_path: /admin/login 
     check_path: /admin/login_check 
     default_target_path: /admin 
     logout: 
     path: /admin/logout 
     target:/
     anonymous: true 

    access_control: 
    - { path: ^/admin/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/logout$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/login_check$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, roles: ROLE_ADMIN } 
    - { path: ^/.*, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

security.yml

에서 관리자의 방화벽을 만들었습니다.

나는 symfony2가 라우트를 찾을 수없는 예외를 throw하지 않는다면 login 액션을 만들어야한다는 것을 알고있다.

관리자 로그인에 대한 라우팅 :보기 로그인 페이지

admin_login: 
    pattern: /admin/login 
    defaults: { _controller: CSCommonBundle:Admin/Default:login } 

컨트롤러 :

public function loginAction() 
{ 
    return $this->render('CSCommonBundle:Admin/Login:login.html.twig'); 
} 

그리고 로그인 폼 : 이제

<form class="form-signin" action="/admin/login_check" method="post"> 
    <h2 class="form-signin-heading">Giriş Yapın</h2> 
    <div class="login-wrap"> 
     <input type="text" name="_username" id="username" class="form-control" placeholder="{% trans %}Kullanıcı Adı{% endtrans %}/{% trans %}E-Posta{% endtrans %}" autofocus> 
     <input type="password" name="_password" id="password" class="form-control" placeholder="{% trans %}Şifre{% endtrans %}"> 
     <label class="checkbox"> 
      <input type="checkbox" id="remember_me" name="_remembe_me" value="on"> Beni Hatırla 
     </label> 
     <button class="btn btn-lg btn-login btn-block" type="submit">{% trans %}Giriş Yap{% endtrans %}</button> 
    </div> 
</form> 

, 난에 대한 몇 가지 질문이있다;

  1. 어떻게 로그인 오류가 발생합니까?
  2. 이와 같은 로그인 양식을 만드는 것이 fosuserbundle과 호환됩니까?
  3. 다른 사용자 유형에 대해 다른 로그인 페이지를 만들 수 있습니까?
  4. /admin/login_check 형식 (security.yml과 동일)은 healty입니까?

제게 설명해주세요. 나는이 길에서 길을 잃고 붙어있다.

답변

2

이 작업을 올바르게 수행하려면 FOSUserBundle 설명서를 참조하십시오. 로그인 액션을 렌더링하는 컨트롤러는 실제로 FOSUserBundle SecurityControlle loginAction이어야합니다. 이렇게하면 보안 관점에서 올바르게 로그인 할 수 있으며 로그인 오류 메시지도 처리합니다.

1 1. FOSUserBundle은 로그인 오류에 플래시 메시징을 사용하므로 템플릿에이를 구현해야한다고 생각합니다.

2. FOS의 문서를 확인하는 것이 좋습니다. 양식 대신 사용할 새 양식을 만드는 방법을 정확하게 설명합니다. https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_templates.md

3. 가능합니다. 나는 과거 FOSUserBundle SecurityController를 확장하고 renderLogin() 메소드를 오버라이드하여 이것을 수행했다. https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/SecurityController.php. 이렇게하면 다른 로그인 템플릿을 지정할 수 있습니다. 예를 들어, 사용자가이를 좋아하는 향하고 어떤 경로를 확인하기 위해 검사를 추가 할 수 있습니다

protected function renderLogin(array $data) { 

    // get target path 
    if ($this->getSession()->get('_security.main.target_path')) { 
     $targetPath = $this->getSession()->get('_security.main.target_path'); 
    } else { 
     $targetPath = $this->get('router')->generate('default_route'); 
    } 

    $template = 'AcmeBundle:Security:loginOne.html.twig'; 

    // if admin 
    if(strstr($targetPath, '/admin') !== false) { 
     $template = 'AcmeBundle:Security:loginTwo.html.twig'; 
    } 

    return $this->container->get('templating')->renderResponse($template, $data); 
} 

내가 마스터 양식을 사용하고 다른 모든 로그인 형태로 대체 할 수 있습니다 나뭇 가지 블록을 사용하는 것이 좋습니다 것, 그 양식의 스킨 만 변경하고 전체 양식 마크 업 자체는 변경하지 마십시오. 보안 컨트롤러를 확장하려면 Resources/config/routing/security.xml에있는 로그인 경로를 다시 만들어야 사용할 수 있습니다.

4. 네, 괜찮습니다. 그러나 이에 대한 경로가 있습니다. 폼에서 login_check 경로를 하드 코딩하지 않지만 경로를 생성하고 생성합니다. 클라이언트에게는 동일한 URL이지만 유지 보수가 더 쉬울 것입니다.검사를위한 기본 FOS 경로는 'fos_user_security_check'입니다. 경로를 하드 코딩하는 대신 security.yml 파일에서 경로를 사용해야합니다. 이렇게하면 경로를 변경하여 간단하게 경로를 변경할 수 있습니다.

이렇게하면 전체 양식 및 보안 컨트롤러를 다시 만들지 않고도 관리자 로그인 대 프런트 엔드 로그인에 다른 템플릿을 사용할 수 있습니다. FOS가 보안을 관리하고, 필요한 것을 확장 및 재정의하십시오.

+0

감사합니다. 그러나 템플릿을 재정의하는 것에 대한 Fos의 문서는 효율적이지 않습니다. 예를 보여줄 수 있습니까? –

+0

확실히 템플릿을 재정의하려면 app/Resources에 새 파일을 만들어야합니다. 로그인하려면 app/Resources/FOSUserBundle/views/Security/login.html.twig가됩니다. 하나의 관리자와 프런트 엔드 사용자를위한 여러 템플릿을 사용하려는 경우, defaut 템플릿을 재정의 할 필요없이 보안 컨트롤러 자체를 무시하고 사용자가 직접 템플릿을 렌더링하면됩니다. login_check이 그 입력 이름을 사용하기 때문에 그들이 사용하는 동일한 마크 업을 유지하는 것이주의하십시오. – joe42

+0

양식 요소의 이름은 무엇입니까? 나는 정말로 혼란 스럽다. 이에 대한 실용적인 예는 없습니다. –

관련 문제