From 119715de07db7706333f4b1cb0d42c1deb39da4b Mon Sep 17 00:00:00 2001 From: Johannes Date: Thu, 10 Oct 2024 10:10:04 +0200 Subject: [PATCH] fix: DoctrineTokenProvider not oracle compatible Oracle converts all not quoted names to uppercase --- .../Security/RememberMe/DoctrineTokenProvider.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Security/RememberMe/DoctrineTokenProvider.php b/src/Symfony/Bridge/Doctrine/Security/RememberMe/DoctrineTokenProvider.php index 5b6b37525426a..834826c612610 100644 --- a/src/Symfony/Bridge/Doctrine/Security/RememberMe/DoctrineTokenProvider.php +++ b/src/Symfony/Bridge/Doctrine/Security/RememberMe/DoctrineTokenProvider.php @@ -55,15 +55,17 @@ public function __construct(Connection $conn) */ public function loadTokenBySeries(string $series) { - // the alias for lastUsed works around case insensitivity in PostgreSQL - $sql = 'SELECT class, username, value, lastUsed AS last_used FROM rememberme_token WHERE series=:series'; + $sql = 'SELECT class, username, value, lastUsed FROM rememberme_token WHERE series=:series'; $paramValues = ['series' => $series]; $paramTypes = ['series' => ParameterType::STRING]; $stmt = $this->conn->executeQuery($sql, $paramValues, $paramTypes); - $row = $stmt instanceof Result || $stmt instanceof DriverResult ? $stmt->fetchAssociative() : $stmt->fetch(\PDO::FETCH_ASSOC); + + // fetching numeric because column name casing depends on platform, eg. Oracle converts all not quoted names to uppercase + $row = $stmt instanceof Result || $stmt instanceof DriverResult ? $stmt->fetchNumeric() : $stmt->fetch(\PDO::FETCH_NUM); if ($row) { - return new PersistentToken($row['class'], $row['username'], $series, $row['value'], new \DateTime($row['last_used'])); + [$class, $username, $value, $last_used] = $row; + return new PersistentToken($class, $username, $series, $value, new \DateTime($last_used)); } throw new TokenNotFoundException('No token found.');