Проверьте, аутентифицирован ли пользователь в symfony2

Я попытался создать простое приложение для входа в symfony2 и ничего не понимаю. Мой файл маршрутизации:

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

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

Мой контроллер с этими двумя методами:

public function loginPageAction(){
    return $this->render('ShopDesktopBundle:User:loginPage.html.twig');
}
public function loginCheckAction(Request $request){
    $request = $this->get('request');
    $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' => 'Error'));
    }
}

Моя форма в поле зрения:

 <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>

Эта система при входе в систему работает нормально, но проблема в layout.html.twig:

{% if app.user %}
     <p>Test</p>
{% elseif not app.user %}
     <span><a href="{{ path('shop_show_login_page') }}" style="color: #ffffff;">Login / Register</a></span>
{% endif %}

Моя безопасность.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
        logout:
            path:   _demo_logout
            target: _demo
        #anonymous: ~
        #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 }

Итак, я хочу видеть на странице «Тест», если пользователь успешно аутентифицирован, и войти / зарегистрироваться, если аутентификация не удалась. Я пробовал с «if app.user», но не понимаю принципа.


person TanGio    schedule 24.04.2015    source источник
comment
Какую версию Symfony вы используете??? Вопрос имеет несколько тегов версии (2.1 и 2.3)   -  person gp_sflover    schedule 24.04.2015
comment
дублируется. Заголовок stackoverflow.com/questions/9660764/   -  person Houssein Zouari    schedule 19.03.2018


Ответы (1)


Существует несколько способов проверить, аутентифицирован ли пользователь.

Один из них будет с app.user, как вы пытались, например:

{% if app.user is not empty %}

Это проверит, заполнен ли ваш пользовательский объект данными.

Вы также можете использовать is_granted().

{% if is_granted('IS_AUTHENTICATED_FULLY') %}

- Обновить-

Ошибка, которую вы указали в комментариях, может быть вызвана тем, что вы пытаетесь использовать функцию is_granted, когда вы не находитесь за брандмауэром. Если это так, вы можете сначала проверить, есть ли токен безопасности, прежде чем вызывать is_granted с if app.security.token is not empty. Не могли бы вы включить свой файл security.yml?

- Обновить-

Ваш файл безопасности должен быть настроен правильно, чтобы ваша аутентификация работала. Поведение по умолчанию настроено так, чтобы дать вам отправную точку, но вам необходимо настроить брандмауэр. Взгляните и внимательно прочитайте главу о Безопасности в Symfony.

person Artamiel    schedule 24.04.2015
comment
Показывает ли панель инструментов отладки, что вы вошли в систему после отправки формы? - person Artamiel; 24.04.2015
comment
Я получаю сообщение об ошибке: во время рендеринга шаблона возникло исключение (в хранилище токенов нет токена аутентификации. Одна из возможных причин может заключаться в том, что для этого URL-адреса не настроен брандмауэр. - person TanGio; 24.04.2015
comment
@Gigel, добавил немного больше информации. - person Artamiel; 24.04.2015
comment
Я добавил security.yml, я их не меняю, это по умолчанию - person TanGio; 24.04.2015
comment
@Gigel, вам также нужно настроить безопасность. Я добавил ссылку на главу, которую вы должны прочитать. - person Artamiel; 24.04.2015
comment
Я отредактировал свой файл security.yml. Если я захожу на домашнюю страницу, я перенаправляюсь на /login - person TanGio; 24.04.2015