2014-01-28 5 views
0

Я новичок в Symfony и пытается разработать приложение Войти с помощью Symfony Docs .Но я получил ошибку на представить событие, как показано ниже«Неверные учетные данные» в традиционной форме входа

exception 'Symfony\Component\Security\Core\Exception\BadCredentialsException' with message 'Bad credentials' in D:\xampp\htdocs\LoginProject\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php:90 Stack trace: #0 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(3366): session_start() #1 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(3444): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start() #2 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(3190): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->getBag('attributes') #3 D:\xampp\htdocs\LoginProject\vendor\symfony\symfony\src\Symfony\Component\Security\Http\Firewall\ContextListener.php(76): Symfony\Component\HttpFoundation\Session\Session->get('_security_secur...') #4 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(4644): Symfony\Component\Security\Http\Firewall\ContextListener->handle(Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #5 [internal function]: Symfony\Component\Security\Http\Firewall->onKernelRequest(Object(Symfony\Component\HttpKernel\Event\GetResponseEvent), 'kernel.request', Object(Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher)) #6 D:\xampp\htdocs\LoginProject\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher.php(392): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\GetResponseEvent), 'kernel.request', Object(Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher)) #7 [internal function]: Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->Symfony\Component\HttpKernel\Debug\{closure}(Object(Symfony\Component\HttpKernel\Event\GetResponseEvent), 'kernel.request', Object(Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher)) #8 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(2903): call_user_func(Object(Closure), Object(Symfony\Component\HttpKernel\Event\GetResponseEvent), 'kernel.request', Object(Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher)) #9 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(2836): Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(Array, 'kernel.request', Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #10 D:\xampp\htdocs\LoginProject\app\cache\dev\classes.php(3000): Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #11 D:\xampp\htdocs\LoginProject\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher.php(139): Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.request', Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #12 D:\xampp\htdocs\LoginProject\app\bootstrap.php.cache(2900): Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->dispatch('kernel.request', Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #13 D:\xampp\htdocs\LoginProject\app\bootstrap.php.cache(2883): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #14 D:\xampp\htdocs\LoginProject\app\bootstrap.php.cache(3022): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #15 D:\xampp\htdocs\LoginProject\app\bootstrap.php.cache(2303): Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #16 D:\xampp\htdocs\LoginProject\web\app_dev.php(28): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #17 {main} 

пожалуйста, проверьте мой код ниже

security.yml

secured_area: 
     pattern: ^/ 
     anonymous: ~ 
     form_login: 
      check_path: /login_check 
      login_path: login_login_homepage 

     logout: 
      path: login_login_logout 
      target:/
      invalidate_session: true 

     #anonymous: ~ 
     #http_basic: 
     # realm: "Secured Demo Area" 

access_control: 
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
    - { path: ^/admin/users, roles: ROLE_SUPER_ADMIN } 
    - { path: ^/admin, roles: ROLE_ADMIN } 
    - { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: /user, roles: ROLE_USER } 
    - { path: /.*, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

routing.yml

login_login_homepage: 
    pattern: /login 
    defaults: { _controller: LoginLoginBundle:Default:login } 

check_login: 
    pattern: /login_check 

DefaultController.php

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

     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); 
     } 


     $login = $this->check_loginAction($request->get('username'),$request->get('password')); 
     if($login){ 
      return $this->render(
       'LoginLoginBundle:Default:Login.html.twig', 
       array(
        'last_username'=>$session->get(SecurityContext::LAST_USERNAME) 
       ) 
     ); 
     }else{ 
     return $this->render(
       'LoginLoginBundle:Default:Login.html.twig', 
       array(
        'last_username'=>'Error', 
        'error'=>$error, 
       ) 
     ); 
     } 
    } 

    public function check_loginAction($username,$password){ 

      $em = $this->getDoctrine()->getManager(); 
      $respondary = $em->getRepository('LoginLoginBundle:Login'); 

      $login = $respondary->findOneBy(array('user' => $username, 'pass' => $password)); 
      if($login){ 
       return true; 
      }else{ 
       return false; 
       //$this->render('LoginLoginBundle:Default:Login.html.twig', array('error' => 'Login Failed')); 
      } 

    } 

Пожалуйста, помогите мне его.

ответ

2

Вы ввели неправильное имя пользователя или пароль. Проверьте имя пользователя и пароль в security.yml:

providers: 
    in_memory: 
     memory: 
      users: 
       ryan: { password: ryanpass, roles: 'ROLE_USER' } 
       admin: { password: kitten, roles: 'ROLE_ADMIN' } 
+0

Thanx @Victor, но я хочу проверить существующее имя пользователя в mysql table.then, как я могу это сделать? –

+0

Если вы хотите использовать БД для пользователей магазина, прочитайте [Как загрузить пользователей безопасности из базы данных] (http://symfony.com/doc/current/cookbook/security/entity_provider.html#authenticating-someone-with- а-заказ предприятие-поставщик). Существует пример с методом 'loadUserByUsername'' UserRepository' для загрузки пользователя из БД по имени пользователя –

1

Вам не нужно реализовать check_loginAction. Symfony2 позаботится об этом.

Так, в контроллере, то loginAction просто как:

public function loginAction(Request $request) 
    { 
     $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 $this->render('LoginLoginBundle:Default:Login.html.twig', array(
      // last username entered by the user 
      'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
      'error'   => $error, 
     )); 
    } 

Самое главное, чтобы убедиться, что вы установили правильный поставщик, он должен указывать на User класс, который вы реализовали. Например, предположим, что у вас есть класс User внутри вашего LoginLoginBundle, расположенный в Acme\Bundle. Таким образом, поставщик должен быть установлен следующим образом:

providers: 
     main: 
      entity: { class: Acme\Bundle\LoginLoginBundle\Entity\User, property: username } 

Наконец, вы должны убедиться, что role_hierarchy установлен на соответствие имени роль в вашем Role классе:

role_hierarchy: 
     YourRoleName1: [ROLE_USER, ROLE_ADMIN, ROLE_SUPERADMIN] 
     YourRoleName2: [ROLE_USER, ROLE_ADMIN] 
     YourRoleName3: ROLE_USER 
     YourRoleName4: ROLE_USER 
Смежные вопросы