/** * Tries to read the username from the cookie. * * @param UserProviderInterface $provider * @return UserInterface * @throws AuthException */ public function autoLogin(UserProviderInterface $provider) { try { if (null === ($cookie = $this->cookie->get($this->name))) { throw new AuthException('No remember me cookie found.'); } $cookieParts = $this->decodeCookie($cookie); if (count($cookieParts) !== 3) { throw new AuthException('The cookie is invalid.'); } list($username, $expires, $hash) = $cookieParts; if ($expires < time()) { throw new AuthException('The cookie has expired.'); } if (false === ($username = base64_decode($username, true))) { throw new AuthException(sprintf('"%s" contains a character from outside the base64 alphabet.', $username)); } if (!($user = $provider->findByUsername($username))) { throw new AuthException(sprintf('No user found for "%s".', $username)); } if (true !== $this->compareHashes($hash, $this->generateCookieHash($username, $expires, $user->getPassword()))) { throw new AuthException('The cookie\'s hash is invalid.'); } } catch (AuthException $e) { $this->remove(); throw $e; } return $user; }