2015-08-02 3 views
0

Я использую Symfony 2.7, и у меня возникают проблемы с регистрацией пользователей. Я использую Custom Entity, и я создал пользовательский объект «Operator» с соответствующими переменными и методами. Я использую два метода входа в файл безопасности. Один из них - in_memory, и я использую его для входа администратора, который работает правильно, а другой - user_db. Я использую алгоритм bcrypt для шифрования паролей. Когда я пытаюсь войти в систему, отображается сообщение «Недопустимые учетные данные». Что я делаю не так? Спасибо!Ошибка входа в систему пользователя Symfony2.7

security.yml

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 
     Application\AdminBundle\Entity\Operator: 
      algorithm: bcrypt 

providers: 
     chain_provider: 
      chain: 
       providers: [ in_memory, user_db ] 

user_db: 
      entity: 
       class: ApplicationAdminBundle:Operator 
       property: username 

SecurityController.php

<?php 

namespace Application\AdminBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 

class SecurityController extends Controller 
{ 
/** 
* @Route("/login", name="login") 
*/ 
public function loginAction(Request $request) 
{ 
    $authenticationUtils = $this->get('security.authentication_utils'); 

    $error = $authenticationUtils->getLastAuthenticationError(); 

    return $this->render('ApplicationAdminBundle:security:login.html.twig', 
     array(
      'error'   => $error, 
     ) 
    ); 
} 

/** 
* @Route("/login_check", name="login_check") 
*/ 
public function loginCheckAction() 
{ 
} 

} 

методы "Оператор" Entity и SetPassword(), GetPassword()

public function setPassword($password) 
    { 
     $this->password = password_hash ($password, PASSWORD_BCRYPT); 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

ответ

0

Решение:

Все, что я сделал неправильно был таблицу базы данных, так как я установил поле пароля в varchar(25) и хэшируются пароль не может быть полностью вставлен. Я изменил его на varchar(255), и теперь все в порядке. Теперь каждый пользователь может войти в систему.

1

Вероятно, вы не должны использовать password_hash вы должны использовать кодер symfony, который знает, как обрабатывать шифрование e пароль. Попробуйте реализовать что-то вроде этого в вашем коде (обычно в контроллере регистров): http://symfony.com/doc/current/book/security.html#dynamically-encoding-a-password

Посетите эту страницу http://symfony.com/doc/current/book/security.html, чтобы полностью понять, как работает защита symfony2.

+0

Все, что я сделал неправильно, было таблицей базы данных, потому что я установил поле пароля как «varchar (25)», и хешированный пароль не мог быть полностью вставлен. Я изменил его на «varchar (255)», и теперь все в порядке. Теперь каждый пользователь может войти в систему. – XhensB

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