10

カスタム ユーザー チェッカーを作成して、最後に承認された eula に対してログイン アクションを検証したいと考えています。アイデアは非常に単純で、多くのバージョンの eula があり、ユーザーは最新の eula を受け入れるまでログインできません

シナリオは次のとおりです。

  1. ユーザーは新しいアカウントを作成し、eula を受け入れます。
  2. Eula が更新されます
  3. ユーザーがログインしようとしましたが、最新の eula を受け入れませんでした
  4. ユーザーは同じログイン フォームを取得しますが、「最新の eula を受け入れる」フィールドが追加されています。
  5. ユーザーがログインし、システムが情報を挿入します: 現在の日付と時刻、ユーザー ID、Eula の受け入れを追跡するための Eula ID。

これを見つけました: https://groups.google.com/forum/#!msg/symfony2/D0V0bFks9S0/Qg9mrbpfB3IJ

残念ながら、カスタム ユーザー チェッカーのフル バージョンはありません。残りの部分を実装するにはどうすればよいですか?

4

3 に答える 3

7

security.user_checkerバンドルでSymfony のユーザー チェッカー サービス ( ) を再定義できます。

# services.yml
security.user_checker:
    class: MyBundle\Checker\UserChecker
    arguments: [ "@some.service", "%some.param%" ]

次に、Symfony の UserChecker を拡張します。

# UserChecker.php

use Symfony\Component\Security\Core\User\UserChecker as BaseUserChecker;

class UserChecker extends BaseUserChecker
{
    public function checkPreAuth(UserInterface $user)
    {
        parent::checkPreAuth($user);

        // your stuff
    }

    public function checkPostAuth(UserInterface $user)
    {
        parent::checkPostAuth($user);

        // your stuff
    }
}

security.user_checkerサービスは認証プロセス中に呼び出され\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider::authenticate()ます

于 2015-01-20T11:01:39.060 に答える
0

イベントリスナーをイベントにアタッチしてkernel.request、現在ログインしているユーザーが最新の EULA に同意したかどうかを監視してみませんか?

現在のユーザーを取得するには、次のようなものを使用できます。

$securityContext = $this->container->get('security.context');
if (!$securityContext) {
    return;
}

$user = $securityContext->getToken()->getUser();
于 2012-06-19T16:30:01.497 に答える