Система входа в Symfony 2

Я пытался создать систему аутентификации в symfony2, но безрезультатно. В строке состояния отладки для всех ситуаций, которые у меня есть: Зарегистрирован как анон.

Если я сделаю дамп сеанса в представлении, я получу:

"_security.last_error" => BadCredentialsException

Мой файл маршрутизации:

shop_show_login_page:
path: /login
defaults: { _controller: ShopDesktopBundle:User:loginPage }

shop_login_user:
path: /loginUser
defaults: { _controller: ShopDesktopBundle:User:loginCheck }

shop_logout_user:
path: /logout

Мой контроллер:

class UserController extends Controller{
public function loginPageAction(){
return $this->render('ShopDesktopBundle:User:loginPage.html.twig');
}
public function loginCheckAction(){
$request  = $this->getRequest();
$password = $request->request->get('_password');
$login    = $request->request->get('_username');
$em = $this->getDoctrine()->getEntityManager();
$repository = $em->getRepository('ShopDesktopBundle:Customer');
$user = $repository->findOneBy(array('customer_login'=> $login, 'customer_password'=> $password));
if($user){
return $this->redirect($this->generateUrl('shop_desktop_homepage'));
}else{
return $this->render('ShopDesktopBundle:User:loginPage.html.twig',array('message_failed' => 'Eroare : login sau password este gresit'));
}
}
}

Мой взгляд :

<form action="{{ path('shop_login_user') }}" method="post">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
<input type="text" class="form-control" placeholder="Username" name="_username">
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock"></i></span>
<input type="text" class="form-control" placeholder="Password" name="_password">
</div>
</div>
<div class="form-group">
<button type="submit" class="button">Autentificare</button>
</div>
</form>

Security.yml:

security:
# http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password
encoders:
Symfony\Component\Security\Core\User\User: plaintext

# http://symfony.com/doc/current/book/security.html#hierarchical-roles
role_hierarchy:
ROLE_ADMIN:       ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
in_memory:
memory:
users:
user:  { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

# the main part of the security, where you can set up firewalls
# for specific sections of your app
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
secured_area:
pattern:    ^/
form_login:
check_path: shop_login_user
login_path: shop_show_login_page
username_parameter: _username
password_parameter: _password
logout:
invalidate_session: true
path:   shop_logout_user
target: /
anonymous: true
#http_basic:
#    realm: "Secured Demo Area"
# with these settings you can restrict or allow access for different parts
# of your application based on roles, ip, host or methods
# http://symfony.com/doc/current/cookbook/security/access_control.html
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

Я провел несколько дней, но безрезультатно. Помоги мне, пожалуйста!!! Спасибо заранее

1

Решение

Я думаю, проблема в том, что вы не обновили свой user providers В security.yml у вас все еще есть статический список пользователей, предоставленный in_memory пользователь провайдер. Система безопасности не знает вашего собственного класса ShopDesktopBundle:Customer,

Если вы будете следовать кулинарной книге «Как создать пользовательский провайдер«, вы должны быть в состоянии решить это:

Обновите свой класс пользователя

Ваш пользовательский класс Customer должен реализовать UserInterface (а также рекомендуется EquatableInterface)

class Customer implements UserInterface, EquatableInterface { […] }

Добавить UserProvider

Вы должны создать UserProvider, лайк:

class CustomerUserProvider implements UserProviderInterface {
public function loadUserByUsername($username) { […]}
public function refreshUser(UserInterface $user) { […] }
public function supportsClass($class) {
return $class === 'Shop\DesktopBundle\Customer';
}
}

Создать сервис и обновить user_provider в security.yml

Наконец, создайте сервис в вашем service.yml лайк:

services:
customer_user_provider:
class: Shop\DesktopBundle\CustomerUserProvider

И обновить security.yml лайк:

security:
providers:
webservice:
id: customer_user_provider
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]