Symfony 2: How do I check if a user is not logged in inside a template?

后端 未结 2 1098
谎友^
谎友^ 2020-12-04 07:35

In Symfony 2 templates (using Twig), how can I effectively check whether a user is not logged in?

I don\'t want to use ROLE checks. I want a straightfor

相关标签:
2条回答
  • 2020-12-04 08:04

    Although the current answer answers the OP's question, I would like to add more details.

    I understand the OP did not want to check roles, but I am including them so other SO users can copy and paste from this in the future. - everytime I google this, I end up here!

    Symfony Doc Sources:

    • http://symfony.com/doc/current/book/security.html
    • http://symfony.com/doc/current/cookbook/security/remember_me.html

    Check if any user logged in (regardless of role)

    As answered, you can use app.user to check if any user is logged in.

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

    Checking authentication status

    You can use the is_granted() method to check for ROLES, (The below are all roles assigned by symfony, You may also have you own roles (more below))

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

    from the docs:

    IS_AUTHENTICATED_ANONYMOUSLY - automatically assigned to a user who is in a firewall protected part of the site but who has not actually logged in. This is only possible if anonymous access has been allowed.

    IS_AUTHENTICATED_REMEMBERED - automatically assigned to a user who was authenticated via a remember me cookie.

    IS_AUTHENTICATED_FULLY - automatically assigned to a user that has provided their login details during the current session.


    Checking Roles

    You can also use is_granted() to check for roles.
    Assuming we have 3 roles (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 %}
    

    Doing the above inside a controller

    View the following answer: How to check if an user is logged in Symfony2 inside a controller?

    0 讨论(0)
  • 2020-12-04 08:17

    You can check if app.user is set.

     {% if app.user %}
        # user is logged in
     {% else %}
        # user is not logged in
     {% endif %}
    
    0 讨论(0)
提交回复
热议问题