diff --git a/core/modules/user/src/ContextProvider/CurrentUserContext.php b/core/modules/user/src/ContextProvider/CurrentUserContext.php
index 990eafb2747e3845fe420902bca7561c6af64d2c..f1f69ad1480c1d70e07d2a00861a4ed5f0e26b40 100644
--- a/core/modules/user/src/ContextProvider/CurrentUserContext.php
+++ b/core/modules/user/src/ContextProvider/CurrentUserContext.php
@@ -53,9 +53,14 @@ public function getRuntimeContexts(array $unqualified_context_ids) {
       // @todo Do not validate protected fields to avoid bug in TypedData,
       //   remove this in https://www.drupal.org/project/drupal/issues/2934192.
       $current_user->_skipProtectedUserFieldConstraint = TRUE;
+
+      $context = EntityContext::fromEntity($current_user, $this->t('Current user'));
+    }
+    else {
+      // If not user is available, provide an empty context object.
+      $context = EntityContext::fromEntityTypeId('user', $this->t('Current user'));
     }
 
-    $context = EntityContext::fromEntity($current_user, $this->t('Current user'));
     $cacheability = new CacheableMetadata();
     $cacheability->setCacheContexts(['user']);
     $context->addCacheableDependency($cacheability);
diff --git a/core/modules/user/tests/src/Kernel/ContextProvider/CurrentUserContextTest.php b/core/modules/user/tests/src/Kernel/ContextProvider/CurrentUserContextTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..be9e829e4ebb12e3506d7a05c7751591d7ec0574
--- /dev/null
+++ b/core/modules/user/tests/src/Kernel/ContextProvider/CurrentUserContextTest.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace Drupal\Tests\user\Kernel\ContextProvider;
+
+use Drupal\Core\Session\AccountInterface;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\user\Entity\User;
+
+/**
+ * @coversDefaultClass \Drupal\user\ContextProvider\CurrentUserContext
+ *
+ * @group user
+ */
+class CurrentUserContextTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['system', 'user'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installSchema('system', ['sequences']);
+    $this->installEntitySchema('user');
+  }
+
+  /**
+   * @covers ::getAvailableContexts
+   */
+  public function testGetAvailableContexts() {
+    $context_repository = $this->container->get('context.repository');
+
+    // Test an authenticated account.
+    $authenticated = User::create([
+      'name' => $this->randomMachineName(),
+    ]);
+    $authenticated->save();
+    $authenticated = User::load($authenticated->id());
+    $this->container->get('current_user')->setAccount($authenticated);
+
+    $contexts = $context_repository->getAvailableContexts();
+    $this->assertArrayHasKey('@user.current_user_context:current_user', $contexts);
+    $this->assertSame('entity:user', $contexts['@user.current_user_context:current_user']->getContextDefinition()->getDataType());
+    $this->assertTrue($contexts['@user.current_user_context:current_user']->hasContextValue());
+    $this->assertTrue($contexts['@user.current_user_context:current_user']->getContextValue());
+
+    // Test an anonymous account.
+    $anonymous = $this->prophesize(AccountInterface::class);
+    $anonymous->id()->willReturn(0);
+    $this->container->get('current_user')->setAccount($anonymous->reveal());
+
+    $contexts = $context_repository->getAvailableContexts();
+    $this->assertArrayHasKey('@user.current_user_context:current_user', $contexts);
+    $this->assertSame('entity:user', $contexts['@user.current_user_context:current_user']->getContextDefinition()->getDataType());
+    $this->assertFalse($contexts['@user.current_user_context:current_user']->hasContextValue());
+  }
+
+}