有没有办法可以存储用户上次登录的时间?
我正在使用 symfony2,安全配置一切正常。
我见过这个基于 Symfony 2 的项目的安全性和登录,这是一个类似的问题,但它不符合我的需要。
还有其他解决办法吗?
您可以创建一个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
,如下所述:http://symfony.com/doc/current/book/security.html#loading-users-from-the-database.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)