2016-10-15 5 views
0

Я пытаюсь добавить пользователей, сохраненных в базе данных, на мой сайт Silex с помощью SecurityProvider.Silex - UserProviderInterface всегда возвращает «Bad credentials»

Я зарегистрировал поставщика безопасности

$app['security.firewalls'] = array 
(
    'admin' => array 
    (
     'pattern' => '^/admin', 
     'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'), 
     'logout' => array('logout_path' => '/admin/logout', 'invalidate_session' => true), 
     'users' => function() use($app) 
     { 
      return new Entity\UserProvider($app); 
     } 
    ) 
); 

И Entity\UserProvider($app) класс идет как следовать (только часть кода показана)

class UserProvider implements UserProviderInterface 
{ 
    public function loadUserByUsername($username) 
    {  
     return new User('blabla', 'patate', ['ROLE_ADMIN'], true, true, true, true); 
    } 
} 

Но даже если я вернуть новый пользователь, и не бросайте UsernameNotFoundException, страница входа еще дает мне сообщение Bad credentials..

Почему я получаю это сообщение с плохими полномочиями? Я что-то забыл? Я испортил какую-то конфигурацию?

Благодаря

+0

Как вы добавляете пользователей в БД? –

+0

На данный момент нет пользователей и нет ссылки на базу данных. Я просто пытаюсь настроить систему User с поддельными данными перед созданием ссылки с базой данных. – Wndrr

ответ

1

Пароль кодировщик algorytms, которые используются в силикатном и на создании пользователя отличаются.

кодировщика в силикатном задается параметром security.default_encoder

$app['security.default_encoder'] = function ($app) { 
    return $app['security.encoder.bcrypt']; 
}; 
... 
$app['security.encoder.bcrypt'] = function ($app) { 
    return new BCryptPasswordEncoder($app['security.encoder.bcrypt.cost']); 
}; 

Использование bcrypt для кодирования пароля по созданию пользовательского

return new User(
    'blabla', 
    $app['security.encoder.bcrypt']->encodePassword('patate', ''), 
    ['ROLE_ADMIN'], 
    true, true, true, true 
); 

Или изменить силикатный кодер PLAINTEXT (без кодирования), чтобы проверить, если Войти работает

$app['security.default_encoder'] = function ($app) { 
    return new \Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder(); 
}; 
0

Спасибо Max P. за ваш ответ, вы привели меня к решению. Вы заставили меня задаться вопросом, почему вы будете говорить о шифровании паролей, когда я использую поддельные данные, поэтому я проверил, что произойдет, если я буду использовать одни и те же значения везде.

Единственная проблема заключалась в том, что я использовал поддельные данные. Я предположил, что данные, которые я предоставлял в форме входа, будут идти прямо в забвение, но на самом деле Silex гарантирует, что данные из формы соответствуют данным в возвращаемом объекте пользователя.

Если это не так, это неявно вызывает ошибку «Плохие учетные данные». (было бы неплохо, если бы журналы silex сказали бы мне, что ...)