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

44
{% if is_granted('IS_AUTHENTICATED_FULLY') %}代わりに使用してください。Symfony2 doc:symfony.com/doc/current/book/…を参照してください。:サイレックスのためにも利用できるsilex.sensiolabs.org/doc/providers/...
ローナン

16
@Ronan {% if is_granted('IS_AUTHENTICATED_FULLY') %}は、ユーザーが現在のセッションで認証されている場合にのみtrueを返します。ユーザーが記憶機能Cookieを介して認証された場合は、falseを返します。{% if app.user %}ユーザーがいつ認証されたかに関係なくtrueを返したい場合は、正しい使い方です。
RayOnAir 2014年

@Ronan、次のエラーが発生するため機能しません:クラス「Symfony \ Component \ Security \ Core \ Authentication \ Token \ PreAuthenticatedToken」のトークンに認証プロバイダーが見つかりません。
ハロルド

{% if app.security.token is null or app.security.token.user == 'anon.' %}それは私がそれを私のために機能させた方法です
セバスチャン・G・マリネスク

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(以下は、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-記憶機能Cookieを介して認証されたユーザーに自動的に割り当てられます。

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


役割の確認

を使用is_granted()して役割を確認することもできます。
私たちは3つの役割を持っていると仮定すると(ROLE_SUPER_ADMINROLE_ADMINROLE_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説明されている2番目のパラメーターは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ドキュメントの最初の行はread 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.