2

コントローラでこれを行うと:

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

コントローラが保護されていないURLの下にある場合、トークンはnullです。

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_ADMIN }
    - { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY }

私の場合、コントローラーアクションはで呼び出され/publicます。/ただし、コードが保護されたページで実行されている場合、トークンは存在します。

これが必要な理由は、ユーザーがログインした場合に備えて追加情報を含めたいので、この「トークン」の存在を確認したかったからです。

ユーザーがログインしているかどうかを確認するためのより良い方法はありますか?保護された領域と保護されていない領域の両方で機能しますか?

4

1 に答える 1

5

ユーザーが完全に認証されているかどうか、つまり、関数に対して匿名でないかどうかを確認することで、ユーザーが認証されているかどうかを確認できisGrantedます。

use Symfony\Component\Security\Core\Exception\AccessDeniedException

public function editAction()
{
    if (false === $this->get('security.context')->isGranted(
        'IS_AUTHENTICATED_FULLY'
       )) {
        throw new AccessDeniedException();
    }
    // ...
}

詳細については、こちらをご覧ください。

于 2012-11-19T17:38:49.800 に答える