ユーザーが最後にログインしたのはいつかを保存する方法はありますか?
私は symfony2 を使用していますが、すべてがセキュリティ設定で問題なく動作しています。
このSecurity and login on a Symfony 2 based project を見たことがありますが、これは同様の質問ですが、私のニーズには合いません。
他の解決策はありますか?
ユーザーが最後にログインしたのはいつかを保存する方法はありますか?
私は symfony2 を使用していますが、すべてがセキュリティ設定で問題なく動作しています。
このSecurity and login on a Symfony 2 based project を見たことがありますが、これは同様の質問ですが、私のニーズには合いません。
他の解決策はありますか?
AuthenticationHandler
ユーザーが正常にログインしたときに Symfony が呼び出す を作成できます。ログイン時間をUser
エンティティ プロパティに保存できます (このシナリオがあると仮定します)。
まず、成功認証ハンドラーを作成します。
namespace Acme\TestBundle\Handler;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\DependencyInjection\ContainerAware;
class AuthenticationHandler extends ContainerAware implements AuthenticationSuccessHandlerInterface
{
function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$token->getUser()->setLoginTime(new \DateTime());
$this->container->get('doctrine')->getEntityManager()->flush();
return new RedirectResponse($this->container->get('router')->generate('login_success'));
}
}
次に、構成ファイルで認証ハンドラーをサービスとして登録する必要があります。たとえば、src/Acme/TestBundle/resources/Config/services.yml
services:
authentication_handler:
class: Acme\TestBundle\Handler\AuthenticationHandler
calls:
- [ setContainer, [ @service_container ] ]
作成したハンドラーを使用するようにログイン フォームを構成し、security.yml
form_login:
success_handler: authentication_handler
明らかに、これが機能するには、プロパティと対応するセッターを持つUser
エンティティが必要です。また、エンティティ リポジトリをユーザー プロバイダーとしてloginTime
使用するようにログインを構成する必要があります。User
DaoAuthenticationProvider
非常に簡単な解決策は、アプリケーションにFOSUserBundleを実装することです。これは、データベースの各ユーザー エントリに (とりわけ) "last_login" フィールドがあるためです。