actually, the issue might be that ``expiresIn`` is used the wrong way for Facebook:

```pjp
             if (isset($token['expires_in'])) {
                 $this->setExpiresIn($token['expires_in']);
             } elseif (isset($token['oauth_expires_in'])) {
                 $this->setExpiresIn($token['oauth_expires_in']);
             } elseif (isset($token['expires'])) {
                 // Facebook unfortunately breaks the spec by using 'expires' instead of 'expires_in'
                 $this->setExpiresIn($token['expires']);
             }
```

I guess ``expires`` for Facebook has the same meaning than the HTTP header: the time at which the token expires. On the other hand, ``expires_in`` is a lifetime. The HTTP equivalent is ``Max-Age``. this means that in the case of Facebook, the value stored in ``expiresIn`` is not the right one.