diff --git a/lib/private/Authentication/LoginCredentials/Store.php b/lib/private/Authentication/LoginCredentials/Store.php
index 6dd7dc3fb738e48f0951f10c080d383a85ff4a5d..0a3b57b9c6c2cc20dff6c2c7b0589a08c90bdfe5 100644
--- a/lib/private/Authentication/LoginCredentials/Store.php
+++ b/lib/private/Authentication/LoginCredentials/Store.php
@@ -111,8 +111,13 @@ class Store implements IStore {
 		}
 
 		if ($trySession && $this->session->exists('login_credentials')) {
-			$creds = json_decode($this->session->get('login_credentials'));
-			return new Credentials($creds->uid, $creds->loginName, $creds->password);
+			/** @var array $creds */
+			$creds = json_decode($this->session->get('login_credentials'), true);
+			return new Credentials(
+				$creds['uid'],
+				$creds['loginName'] ?? $this->session->get('loginname') ?? $creds['uid'], // Pre 20 didn't have a loginName property, hence fall back to the session value and then to the UID
+				$creds['password']
+			);
 		}
 
 		// If we reach this line, an exception was thrown.
diff --git a/tests/lib/Authentication/LoginCredentials/StoreTest.php b/tests/lib/Authentication/LoginCredentials/StoreTest.php
index 67cb0a18297f989818a53846529908f1b27f30fa..ad8a074660c7f8193413d5d5501ceddbaa5b0966 100644
--- a/tests/lib/Authentication/LoginCredentials/StoreTest.php
+++ b/tests/lib/Authentication/LoginCredentials/StoreTest.php
@@ -35,6 +35,7 @@ use OCP\ILogger;
 use OCP\ISession;
 use OCP\Session\Exceptions\SessionNotAvailableException;
 use Test\TestCase;
+use function json_encode;
 
 class StoreTest extends TestCase {
 
@@ -140,6 +141,81 @@ class StoreTest extends TestCase {
 		$this->store->getLoginCredentials();
 	}
 
+	public function testGetLoginCredentialsPartialCredentialsAndSessionName() {
+		$uid = 'id987';
+		$user = 'user987';
+		$password = '7389374';
+
+		$this->session->expects($this->once())
+			->method('getId')
+			->willReturn('sess2233');
+		$this->tokenProvider->expects($this->once())
+			->method('getToken')
+			->with('sess2233')
+			->will($this->throwException(new InvalidTokenException()));
+		$this->session->expects($this->once())
+			->method('exists')
+			->with($this->equalTo('login_credentials'))
+			->willReturn(true);
+		$this->session->expects($this->exactly(2))
+			->method('get')
+			->willReturnMap([
+				[
+					'login_credentials',
+					json_encode([
+						'uid' => $uid,
+						'password' => $password,
+					])
+				],
+				[
+					'loginname',
+					$user,
+				],
+			]);
+		$expected = new Credentials($uid, $user, $password);
+
+		$actual = $this->store->getLoginCredentials();
+
+		$this->assertEquals($expected, $actual);
+	}
+
+	public function testGetLoginCredentialsPartialCredentials() {
+		$uid = 'id987';
+		$password = '7389374';
+
+		$this->session->expects($this->once())
+			->method('getId')
+			->willReturn('sess2233');
+		$this->tokenProvider->expects($this->once())
+			->method('getToken')
+			->with('sess2233')
+			->will($this->throwException(new InvalidTokenException()));
+		$this->session->expects($this->once())
+			->method('exists')
+			->with($this->equalTo('login_credentials'))
+			->willReturn(true);
+		$this->session->expects($this->exactly(2))
+			->method('get')
+			->willReturnMap([
+				[
+					'login_credentials',
+					json_encode([
+						'uid' => $uid,
+						'password' => $password,
+					])
+				],
+				[
+					'loginname',
+					null,
+				],
+			]);
+		$expected = new Credentials($uid, $uid, $password);
+
+		$actual = $this->store->getLoginCredentials();
+
+		$this->assertEquals($expected, $actual);
+	}
+
 	public function testGetLoginCredentialsInvalidTokenLoginCredentials() {
 		$uid = 'id987';
 		$user = 'user987';