Authentication Symfony根据请求延长身份验证超时

Authentication Symfony根据请求延长身份验证超时,authentication,symfony,security,Authentication,Symfony,Security,我的想法是,Symfony2将在经过身份验证的会话期间发出的每个页面请求上扩展ExpireAt。因此,如果超时时间为100秒,并且您发出了页面请求,那么新的ExpireAt将是time()+100。这种“使用它或丢失它”的身份验证功能类似于您在银行网站上获得的功能 默认功能似乎是当会话超时在config.yml中设置为100时,用户只有100秒的时间来做他们能做的事情 我不认为这很难实现,但应该在哪里实现呢?我的第一个猜测是在isEqualTo方法中。一旦确定用户是可信的,就可以重新设置他们的e

我的想法是,Symfony2将在经过身份验证的会话期间发出的每个页面请求上扩展
ExpireAt
。因此,如果超时时间为100秒,并且您发出了页面请求,那么新的
ExpireAt
将是
time()+100
。这种“使用它或丢失它”的身份验证功能类似于您在银行网站上获得的功能

默认功能似乎是当会话超时在
config.yml
中设置为
100
时,用户只有100秒的时间来做他们能做的事情


我不认为这很难实现,但应该在哪里实现呢?我的第一个猜测是在
isEqualTo
方法中。一旦确定用户是可信的,就可以重新设置他们的
expireAt
。或者cookie是否需要修改?

答案在于
UserProvider
refreshUser
方法和
UserClass
isEqualTo
方法

isEqualTo
方法告诉用户提供者是否
refreshUser(UserInstance user)

  • 步骤1
    isEqualTo()返回false(随着理解的增长,这种逻辑也会随之增长。但本质上,这会触发
    refreshUser()
在所有基本的用户提供程序示例中,
refreshUser
&
loadUserByUsername
都是相同的。要实现我所说的功能,
refreshUser()
需要稍微不同

  • Step2:修改
    refreshUser(UserInterface$user)
    。传入此方法的是原始userClass。因此refreshUser负责同步
    expiresAt
    credentialsExpireAt
我在我的
refreshUser()
中使用此逻辑来延长到期日期或将其设置为原始到期日期(已到期):


您使用的是什么版本的symfony,您使用什么设置来设置超时?最新的.SF 2.1.5-DEV。在用户对象的
config.yml
ExpireAt
中都有会话生存期。我必须记住我,这样它就永远不会过期。扩展完整身份验证是我关注的重点。这可能只是一个完整身份验证的附带条件当会话超时过期时,uth将消失。我只将会话超时设置为100。您是否尝试了
cookie\u lifety
选项?我认为我的主要问题是用户提供程序和用户类。cookie和会话限制发挥了一些作用,因为它们需要存在并保持会话状态。
    if( time() > $user->getCredentialsExpireAt() ){
        $refreshedUser->setCredentialsExpireAt( $user->getCredentialsExpireAt() );
    }