2014-10-24 3 views
0

В моем проекте symfony я хотел бы использовать аутентификацию. Так что я написал это в моем security.yml файлеSymfony2: login_check и аннотация

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

     default: 
      anonymous: ~ 

     login_firewall: 
      pattern: ^/login$ 
      anonymous: ~ 

     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      form_login: 
       login_path: /login 
       check_path: /login_check 
       post_only: true 
       always_use_default_target_path: true 
       default_target_path: /
       use_referer:   false 
       username_parameter:  username 
       password_parameter:  password 
       intention:   authenticate 
      logout: 
       path: /logout 
       target:/

Хорошо, теперь документация говорит, что мне нужно добавить в routing.yml это:

 
login: 
    pattern: /login 
    defaults: { _controller: AcmeSecurityBundle:Security:login } 
login_check: 
    pattern: /login_check 

Но я использую аннотацию, так что я не 't использовать файлы маршрутизации. Вместо этого у меня есть это:

 

    /** 
    * @Route("/login") 
    * @Template() 
    */ 
    public function loginAction() 
    { 
     $request = $this->getRequest(); 
     $session = $request->getSession(); 

     // get the login error if there is one 
     if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
      $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
     } else { 
      $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
      $session->remove(SecurityContext::AUTHENTICATION_ERROR); 
     } 

     return array(
      // last username entered by the user 
      'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
      'error'  => $error, 
     ); 
    } 

Если я ничего не делаю, у меня есть ошибка в моей странице входа:

 "Unable to generate a URL for the named route "login_check" as such route does not exist."

Если добавить действие в моем контроллере с пустым ответом, есть .. . ничего.

Что я делаю неправильно?

ответ

3

login_check или что бы вы ни указывали, это определенный системой маршрут, а не действие. Это означает, что вы не можете/не должны/не будете определять его вручную в контроллере. ;)

Я сам использую annotations для маршрутизации, но, так или иначе, вы будете использовать routing.yml, чтобы импортировать контроллеры и, следовательно, аннотированные маршруты изнутри.

Итак, давайте определим этот маршрут в вашем routing.yml, и он должен работать.

+0

Когда я это сделаю, у меня есть эта ошибка: Невозможно найти контроллер для пути "/ login_check". Возможно, вы забыли добавить соответствующий маршрут в свою конфигурацию маршрутизации? – eluus

+2

Тот, который говорит «Невозможно создать URL», правильно? Это может быть конфликт между брандмауэрами? Я вижу, что у вас также есть 'login_firewall', который, я думаю, перекрывается с брандмауэром' secure_area' –

+0

Вот и все! Большое спасибо ! – eluus

Смежные вопросы