2017-03-19 31 views
0

私のsymfonyプロジェクトでは、私のUserエンティティでUserInterfaceを使って認証を処理しています。私はまた、予想通りのすべての作品ユーザが認証されているかどうかを確認する

public function isEqualTo(UserInterface $user) 
{ 
    if (!$user instanceof Account) { 
     return false; 
    } 
    if ($this->email !== $user->getEmail()) { 
     return false; 
    } 
    return true; 
} 

。彼がログインしている間、ユーザーの電子メールが変更されたかどうかを確認するためにEquatableInterfaceを使用しますが、私はDBにユーザーのメールアドレスを変更するとき、あなたが見ることができるように私は、ログアウトしていないだけで認証されていませんよ次のスクリーンショットで説明します。

https://s15.postimg.org/6md5htszf/22781921b8.png

だから私は、ユーザーが認証されている場合、私はコントローラに確認することができます方法を知っているでしょうか? isEqualToがfalseを返すと、どのようにユーザーに強制的にログアウトさせることができますか?

答えて

2

を使用する必要があると私は他の誰かが同じ問題を抱えている場合は、それを共有したいと思います。

ユーザーが認証されているかどうかを確認するには、TokenInterfaceが実装されており、これはTokenStorageである必要があります。それから、isAuthenticated()メソッドに電話するだけです。

$tokenInterface = $this->get('security.token_storage')->getToken(); 
$isAuthenticated = $tokenInterface->isAuthenticated() 
0

ファスト・メソッド:方法getUserSymfony\Bundle\FrameworkBundle\Controllerlinkを参照してください。サービスのどこかでこの動作が必要な場合は、security.token_storageサービスを依存関係として使用してください。

てみウェイ方式(symfonyのような):あなたは、私は解決策を見つけsymfonyのセキュリティVoters

関連する問題