2015-04-24 4 views
3

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

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

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

Мой контроллер с этим 2 способами:

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

Мой 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 
     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 } 

Так что я хочу видеть на странице «Test», если пользователь authentificated с Succes и Вход/Регистрация, если аутентификация не удалась. Я пробовал использовать «if app.user», но я не понимаю этого принципа. Помоги мне, пожалуйста!!!! Thx заранее

+0

В какой версии Symfony вы используете ??? Вопрос имеет несколько тегов версии (2.1 и 2.3) –

ответ

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?

- Обновление -

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

+0

Я пробовал, но не работал – TanGio

+0

Отображает ли панель отладки, что вы зарегистрированы после отправки вашей формы? – Artamiel

+0

Я получаю сообщение об ошибке: при рендеринге шаблона было выбрано исключение («В хранилище маркеров нет маркера проверки подлинности. Возможна одна причина, по которой для этого URL-адреса не установлен брандмауэр». – TanGio

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