Symfony 2 : 사용자가 템플릿 내에 로그인되어 있지 않은지 어떻게 확인합니까?


101

Symfony 2 템플릿 (Twig 사용)에서 사용자가 로그인하지 않았는지 어떻게 효과적으로 확인할 수 있습니까?

ROLE수표 를 사용하고 싶지 않습니다 . 사용자가 로그인하지 않았는지 확인하는 간단한 방법을 원합니다.

작품 과 비교 app.user.username하는 것은 잘 알고 anon있지만, 그저 나에게 옳지 않다고 생각합니다.

답변:


190

app.user가 설정되어 있는지 확인할 수 있습니다.

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

17
사용자가 로그인되지 {% if not app.user %}
않았는지 확인

44
{% if is_granted('IS_AUTHENTICATED_FULLY') %}대신 사용하십시오 . Symfony2 문서 참조 : symfony.com/doc/current/book/… . Silex에서도 사용 가능 : silex.sensiolabs.org/doc/providers/…
Ronan

16
@Ronan {% if is_granted('IS_AUTHENTICATED_FULLY') %}은 사용자가 현재 세션에서 인증 된 경우에만 true를 반환합니다. 사용자가 Remember me 쿠키를 통해 인증되면 false를 반환합니다. {% if app.user %}사용자가 인증 된시기에 관계없이 true를 반환하려면 사용 이 정확합니다.
RayOnAir

@Ronan, 다음 오류가 발생하므로 작동하지 않습니다. "Symfony \ Component \ Security \ Core \ Authentication \ Token \ PreAuthenticatedToken"클래스의 토큰에 대한 인증 공급자가 없습니다.
Harold

{% if app.security.token is null or app.security.token.user == 'anon.' %}의 나는 나를 위해 일하고있어 어떻게
세바스찬 G. Marinescu

98

현재 답변이 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, (아래는 심포니에서 할당 한 모든 역할입니다. 자신의 역할을 가질 수도 있습니다 (아래 참조) ).

{% 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-Remember me 쿠키를 통해 인증 된 사용자에게 자동으로 할당됩니다.

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에 로그인했는지 확인하는 방법은 무엇입니까?


2
그냥 궁금해서 ... 무엇 -%}{%-의미합니까? 왜 안 %}{%?
V-Light

11
-후행 공백을 모두 제거하여 브라우저 소스 소스에서 더 쉽게 읽을 수 있도록합니다. 자세한 정보 : twig.sensiolabs.org/doc/templates.html#whitespace-control
Anil

이 오래된 질문을 다시 살려 주신 것에 대해 용서하십시오.하지만 익명 사용자에게는 app.user가 null이 아니라는 것을 읽은 것 같습니다. 맞지 않습니까? 그것은 app.user에 대한 확인이 충분하지 않다는 것을 의미하지 않습니까?
pzaj

@Anil symfony.com/doc/2.8/templating/app_variable.html 설명 된 두 번째 매개 변수는 다음 app.user과 같습니다 The value stored in this variable can be a UserInterface object, any other object which implements a __toString() method or even a regular string.. app.user가 "anon"을 반환하는 곳을 읽은 곳이 기억 나지 않습니다. 불행히도 어떤 상황에서 문자열.
pzaj

1
@ user1970395 문서의 첫 번째 줄은 읽었 The representation of the current user or null if there is none.으므로 null이됩니다. 사용자 지정 UserInterface구현에 __toString()익명 일 때 호출 되는 메서드 가있는 경우 타사 번들은 문자열을 반환 할 수 있습니다.
Anil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.