1. ホーム
  2. symfony

ユーザーがコントローラ内で symfony2 にログインしているかどうかをチェックする方法は?

2023-08-12 02:59:25

質問

私が読んだのは ここで Symfony2ベースのWebサイトのtwigテンプレート内部でユーザーのログイン状態をチェックする方法を読みました。 しかし、私はコントローラの内部からユーザーがログインしているかどうかをチェックする方法を知る必要があります。私は、以下のコードが正しいことを確信していました。

$user = $this->get('security.context')->getToken()->getUser();

が、常に何かを返します。例えば、ログインしているユーザーや匿名ユーザーなどです。

何か思い当たることはありますか?よろしくお願いします。

どのように解決するのですか?

警告 : チェック対象は 'IS_AUTHENTICATED_FULLY' をチェックするだけで、ユーザーが "Remember me" 機能を使ってログインしていた場合は false を返します。

Symfony 2のドキュメントによると、3つの可能性があります。

is_authenticated_anonymously(匿名) - に自動的に割り当てられます。 ファイアウォールで保護されているが、実際にはログインしていないユーザーに に自動的に割り当てられます。これは、匿名アクセスが許可されている場合にのみ可能です。

is_authenticated_remembered - が自動的に割り当てられます。 自動的に割り当てられます。

is_authenticated_fully - は、現在のセッションでログイン情報を提供したユーザーに自動的に割り当てられます。 に自動的に割り当てられます。

これらのロールは3つの認証レベルを表します。

もし、あなたが IS_AUTHENTICATED_REMEMBERED ロールがある場合、あなたはまた は IS_AUTHENTICATED_ANONYMOUSLY の役割を持つことになります。もし IS_AUTHENTICATED_FULLY の役割を持つ場合、他の2つの役割も持っています。 言い換えれば、これらのロールは、認証の強度を高めるための3つのレベルを表しています。 認証の強さ(quot;strength")の3つのレベルを表しています。

私たちのシステムで、quot;Remember Me" 機能を使用したユーザーが、以下のチェック項目のみを行うページでまったくログインしていないかのように扱われる問題に遭遇しました。 'IS_AUTHENTICATED_FULLY' .

その答えは、完全に認証されていない場合は再ログインを要求するか、覚えているロールを確認することです。

$securityContext = $this->container->get('security.authorization_checker');
if ($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
    // authenticated REMEMBERED, FULLY will imply REMEMBERED (NON anonymous)
}

うまくいけば、これは私が犯したのと同じ間違いをする誰かを救うことになります。 私は、誰かがSymfony 2にログインしているかどうかをチェックする方法を調べるとき、まさにこの投稿を参考にしました。

ソース http://symfony.com/doc/2.3/cookbook/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources