ユーザが最後にログインしたときに保存できる方法はありますか?Symfony2ログインとセキュリティ
私はsymfony2を使用していますが、すべてセキュリティ設定で問題なく動作しています。
これはよく似た質問ですが、これは私のニーズに合っていません。これはSecurity and login on a Symfony 2 based projectです。
他に解決策はありますか?
ユーザが最後にログインしたときに保存できる方法はありますか?Symfony2ログインとセキュリティ
私はsymfony2を使用していますが、すべてセキュリティ設定で問題なく動作しています。
これはよく似た質問ですが、これは私のニーズに合っていません。これはSecurity and login on a Symfony 2 based projectです。
他に解決策はありますか?
ユーザログインに成功したときにsymfonyが呼び出すAuthenticationHandler
を作成すると、User
エンティティプロパティにログイン時間を保存できます(このシナリオがあると仮定します)。
まず、成功の認証ハンドラの作成:次に、あなたは、たとえば、設定ファイル内のサービスとしてsrc/Acme/TestBundle/resources/Config/services.yml
services:
authentication_handler:
class: Acme\TestBundle\Handler\AuthenticationHandler
calls:
- [ setContainer, [ @service_container ] ]
を認証ハンドラを登録し、ログインを設定する必要が
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'));
}
}
を作成したハンドラを使用するフォームをチェックアウトしてください。security.yml
form_login:
success_handler: authentication_handler
明らかに、これが機能するには、loginTime
プロパティと対応するセッターを持つUser
エンティティが必要です。また、ユーザプロバイダとしてUser
エンティティリポジトリを使用し、ここで説明するDaoAuthenticationProvider
を使用するログインを設定する必要があります。http://symfony.com/doc/current/book/security.html#loading-users-from-the-database。
...このような何かのための私のピックだろう...私は ')('持続必要であるとは思いません'User'オブジェクトは' User'リポジトリを介して取得されているので、既にDoctrineエンティティマネージャによって管理されています。 http://docs.doctrine-project.org/projects/doctrine-orm/ja/latest/reference/unitofwork.html#how-doctrine-keeps-track-of-objectsを確認してください。 –
うーんを逃した – eagleoneraptor
あなたの例では、ユーザーを 'login_success'パスにリダイレクトします。私はログインフォームに 'target_path_parameter'を使用しています。彼がやっていたページにユーザーをリダイレクトするにはどうすればいいですか(私はそれが管理ページ、製品ページなのかどうかわかりません)? '$要求 - >要求 - >(「target_path_parameter」)を取得': –
非常に簡単な解決策は、データベース内の各ユーザーエントリは、(とりわけ)「last_login」フィールドを持っているとして、あなたのアプリケーションでFOSUserBundleを実装することであろう。
あなたのニーズに合わない理由を教えてください。他に何をする必要がありますか?サービスは間違いなくあなたはフラッシュ '前ハンドラで'存続() 'の呼び出し()' –