web-dev-qa-db-ja.com

Symfony 2:ユーザーがテンプレート内にログインしていないかどうかを確認するにはどうすればよいですか?

Symfony 2テンプレート(Twigを使用)で、ユーザーがログインしていないかどうかを効果的に確認するにはどうすればよいですか?

ROLEチェックを使用したくありません。ユーザーがログインしていないかどうかを簡単に確認したいのですが。

app.user.usernameanonと比較することは機能することを知っていますが、それは私には正しく感じられません。

98
Tool

App.userが設定されているかどうかを確認できます。

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

現在の回答はOPの質問に答えていますが、詳細を追加したいと思います。

私はOPがロールをチェックしたくないことを理解していますが、他のSOユーザーが将来これからコピー&ペーストできるようにロールを含めています。 -私がこれをグーグルするたびに、私はここに行きます!

Symfony Docソース:


ログインしているユーザーがあるかどうかを確認します(役割に関係なく)

回答どおり、app.userを使用して、anyユーザーがログインしているかどうかを確認できます。

{% 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-remember me cookieを介して認証されたユーザーに自動的に割り当てられます。

IS_AUTHENTICATED_FULLY-現在のセッション中にログインの詳細を提供したユーザーに自動的に割り当てられます。


役割の確認

is_granted()を使用して役割を確認することもできます。
3つのロール(ROLE_SUPER_ADMINROLE_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にログインしているかどうかを確認する方法?

94
Anil