Symfony 2: Как проверить, не вошел ли пользователь внутри шаблона?

В шаблонах Symfony 2 (с помощью Twig), как я могу эффективно проверить, не был ли пользователь зарегистрирован?

Я не хочу использовать проверки ROLE. Я хочу простой способ проверить, не был ли пользователь зарегистрирован.

Я знаю, что сравнение app.user.username с anon работает, но это мне просто не нравится.

Ответ 1

Вы можете проверить, установлен ли app.user.

 {% if app.user %}
    # user is logged in
 {% else %}
    # user is not logged in
 {% endif %}

Ответ 2

Хотя текущий ответ отвечает на вопрос OP, я хотел бы добавить более подробную информацию.

Я понимаю, что OP не хочет проверять роли, но я включаю их, чтобы другие пользователи SO могли копировать и вставлять их в будущем. - каждый раз, когда я это делаю, я в конечном итоге здесь!

Symfony Doc Источники:


Проверьте, зарегистрирован ли какой-либо пользователь (независимо от роли)

Как уже было сказано, вы можете использовать app.user, чтобы проверить, зарегистрирован ли какой-либо пользователь.

{% if app.user %}
    # user is logged in (any and all users, regardless of ROLE_*)
{% elseif not app.user %}
    # user is not logged in (note the `not` in the `elseif` statement)
{% endif %}

Проверка статуса проверки подлинности

Вы можете использовать метод is_granted() для проверки ROLES (ниже приведены все роли, назначенные symfony, у вас также могут быть собственные роли (подробнее см. ниже))

{% if is_granted('IS_AUTHENTICATED_FULLY') %}
    # This user entered their credentials THIS session
{% elseif is_granted('IS_AUTHENTICATED_REMEMBERED') %}
    # User logged in via a cookie (ie: Auth again before doing sensitive things)
{% elseif is_granted('IS_AUTHENTICATED_ANONYMOUSLY') %}
    # This is a `guest` or anonymous user
{% endif %}

из документов:

IS_AUTHENTICATED_ANONYMOUSLY - автоматически назначается пользователю, который в защищенной части брандмауэра сайта, но на самом деле вошел в систему. Это возможно только в том случае, если анонимный доступ разрешен.

IS_AUTHENTICATED_REMEMBERED - автоматически назначается пользователю, который был аутентифицируется через куки файл "запомнить меня".

IS_AUTHENTICATED_FULLY - автоматически назначается пользователю, который имеет предоставили свои данные для входа в течение текущего сеанса.


Проверка ролей

Вы также можете использовать is_granted() для проверки ролей.
Предполагая, что у нас есть 3 роли (ROLE_SUPER_ADMIN, ROLE_ADMIN и ROLE_USER)

{% if is_granted('ROLE_SUPER_ADMIN') -%}
    # You're `ROLE_SUPER_ADMIN`
{% elseif is_granted('ROLE_ADMIN') -%}
    # You're `ROLE_ADMIN`
{% elseif is_granted('ROLE_USER') -%}
    # You're `ROLE_USER`
{% else %}
    # You're a `nobody` ;P
{%- endif %}

Выполнение вышеуказанного внутри контроллера

Посмотрите следующий ответ: Как проверить, зарегистрирован ли пользователь в Symfony2 внутри контроллера?