2016-07-21 3 views
0

Я только что выполнил инструкции по переопределению контроллера в FOSUserBundlehere.FOSUserBundle: ошибка «Bad credentials» при переопределении SecurityController (логин):

В моем случае я хочу, чтобы переопределить контроллер входа, так что я создал новый пакет под названием UserBundle и SecurityController, как это ниже (как вы можете проверить, я просто скопировал оригинальные SecurityController метод).

namespace UserBundle\Controller; 

use Symfony\Component\HttpFoundation\JsonResponse; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Security\Core\Security; 

class SecurityController extends Controller 
{ 
    public function loginAction(Request $request) 
    { 
die("Here is entering when showing the login form and when submitting it"); 
     /** @var $session \Symfony\Component\HttpFoundation\Session\Session */ 
     $session = $request->getSession(); 
     if (class_exists('\Symfony\Component\Security\Core\Security')) { 
      $authErrorKey = Security::AUTHENTICATION_ERROR; 
      $lastUsernameKey = Security::LAST_USERNAME; 
     } else { 
      // BC for SF < 2.6 
      $authErrorKey = SecurityContextInterface::AUTHENTICATION_ERROR; 
      $lastUsernameKey = SecurityContextInterface::LAST_USERNAME; 
     } 
     // get the error if any (works with forward and redirect -- see below) 
     if ($request->attributes->has($authErrorKey)) { 
      $error = $request->attributes->get($authErrorKey); 
     } elseif (null !== $session && $session->has($authErrorKey)) { 
      $error = $session->get($authErrorKey); 
      $session->remove($authErrorKey); 
     } else { 
      $error = null; 
     } 
     if (!$error instanceof AuthenticationException) { 
      $error = null; // The value does not come from the security component. 
     } 
     // last username entered by the user 
     $lastUsername = (null === $session) ? '' : $session->get($lastUsernameKey); 
     if ($this->has('security.csrf.token_manager')) { 
      $csrfToken = $this->get('security.csrf.token_manager')->getToken('authenticate')->getValue(); 
     } else { 
      // BC for SF < 2.4 
      $csrfToken = $this->has('form.csrf_provider') 
       ? $this->get('form.csrf_provider')->generateCsrfToken('authenticate') 
       : null; 
     } 
     return $this->renderLogin(array(
      'last_username' => $lastUsername, 
      'error' => $error, 
      'csrf_token' => $csrfToken, 
     )); 
    } 
    /** 
    * Renders the login template with the given parameters. Overwrite this function in 
    * an extended controller to provide additional data for the login template. 
    * 
    * @param array $data 
    * 
    * @return \Symfony\Component\HttpFoundation\Response 
    */ 
    protected function renderLogin(array $data) 
    { 
     return $this->render('FOSUserBundle:Security:login.html.twig', $data); 
    } 
    public function checkAction() 
    { 
     throw new \RuntimeException('You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.'); 
    } 
    public function logoutAction() 
    { 
     throw new \RuntimeException('You must activate the logout in your security firewall configuration.'); 
    } 
} 

UserBundle.php

namespace UserBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

class UserBundle extends Bundle 
{ 
    public function getParent() 
    { 
     return 'FOSUserBundle'; 
    } 
} 

Проблема: после submittting регистрационной формы, показанной на /login, я не получаю ошибку Bad credentials, когда они полномочие плохо.

Вот мой security.yml файл:

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: bcrypt 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username 

    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       csrf_token_generator: security.csrf.token_manager 
       # if you are using Symfony < 2.8, use the following config instead: 
       # csrf_provider: form.csrf_provider 

      logout:  true 
      anonymous: true 

    access_control: 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/, role: ROLE_ADMIN } 

Примечание: отладка внутри loginAction на линии, где комментарий // last username entered by the user есть, значение $error является null.

ответ

0

Моя ошибка: Я использовал шаблон, который не показывал ошибки.

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

  • Нет связанных вопросов^_^