diff --git a/core/modules/user/src/Tests/UserFieldsTest.php b/core/modules/user/src/Tests/UserFieldsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..50564d04d98538b6fb3e3a3461396bc14e81c00a
--- /dev/null
+++ b/core/modules/user/src/Tests/UserFieldsTest.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\Tests\UserFieldsTest.
+ */
+
+namespace Drupal\user\Tests;
+
+use Drupal\user\Entity\User;
+use Drupal\simpletest\KernelTestBase;
+
+/**
+ * Tests available user fields in twig.
+ *
+ * @group user
+ */
+class UserFieldsTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['user', 'system'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('user');
+
+    // Set up a test theme that prints the user's mail field.
+    \Drupal::service('theme_handler')->install(array('user_test_theme'));
+    \Drupal::theme()->setActiveTheme(\Drupal::service('theme.initialization')->initTheme('user_test_theme'));
+    // Clear the theme registry.
+    $this->container->set('theme.registry', NULL);
+  }
+
+  /**
+   * Tests account's available fields.
+   */
+  function testUserFields() {
+    // Create the user to test the user fields.
+    $user = User::create([
+      'name' => 'foobar',
+      'mail' => 'foobar@example.com',
+    ]);
+    $build = user_view($user);
+    $output = \Drupal::service('renderer')->render($build);
+    $this->setRawContent($output);
+    $userEmail = $user->getEmail();
+    $this->assertText($userEmail, "User's mail field is found in the twig template");
+  }
+
+}
diff --git a/core/modules/user/templates/user.html.twig b/core/modules/user/templates/user.html.twig
index b00a744a7bb0d3029f06f49c5ac1963a1337f99e..45c4ea0ac6e181f7b0ce605773319d5cac394609 100644
--- a/core/modules/user/templates/user.html.twig
+++ b/core/modules/user/templates/user.html.twig
@@ -17,6 +17,7 @@
  *   e.g. account.field_example.en, thus overriding any language negotiation
  *   rule that was previously applied.
  * - attributes: HTML attributes for the container element.
+ * - user: A Drupal User entity.
  *
  * @see template_preprocess_user()
  *
diff --git a/core/modules/user/tests/themes/user_test_theme/user.html.twig b/core/modules/user/tests/themes/user_test_theme/user.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..715a79e5613caa58b603ddc45dad16532e2bb00a
--- /dev/null
+++ b/core/modules/user/tests/themes/user_test_theme/user.html.twig
@@ -0,0 +1,32 @@
+{#
+/**
+ * @file
+ * Theme override for testing the presence of all user data.
+ *
+ * This template is used when viewing a registered user's page,
+ * e.g., example.com/user/123. 123 being the user's ID.
+ *
+ * Available variables:
+ * - content: A list of content items. Use 'content' to print all content, or
+ *   print a subset such as 'content.field_example'.
+ * - Field variables: For each field attached to the user a corresponding
+ *   variable is defined; e.g., account.field_example has a variable
+ *   'field_example' defined. When needing to access a field's raw values,
+ *   developers/themers are strongly encouraged to use these variables.
+ *   Otherwise they will have to explicitly specify the desired field language,
+ *   e.g. account.field_example.en, thus overriding any language negotiation
+ *   rule that was previously applied.
+ * - attributes: HTML attributes for the container element.
+ * - user: A Drupal User entity.
+ *
+ * @see template_preprocess_user()
+ */
+#}
+<article{{ attributes.addClass('profile') }}>
+  {% if content %}
+    {{ content }}
+  {% endif %}
+  {% if user %}
+    <p>{{ user.mail.value }}</p>
+  {% endif  %}
+</article>
diff --git a/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..79a62e8310e901825873b20686ccee98a20bf4c4
--- /dev/null
+++ b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml
@@ -0,0 +1,5 @@
+name: 'User Test theme'
+type: theme
+description: 'Theme for testing the available fields in user twig template'
+version: VERSION
+core: 8.x
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index f909d62deb860f83e38a8d82153f90589a3715fc..f2c241497a4c3690a08934b72b23fa7a8c90e585 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -1428,6 +1428,7 @@ function user_logout() {
  *   - attributes: HTML attributes for the containing element.
  */
 function template_preprocess_user(&$variables) {
+  $variables['user'] = $variables['elements']['#user'];
   // Helpful $content variable for templates.
   foreach (Element::children($variables['elements']) as $key) {
     $variables['content'][$key] = $variables['elements'][$key];
diff --git a/core/themes/classy/templates/user/user.html.twig b/core/themes/classy/templates/user/user.html.twig
index 7d3add5972b6dcdc7b50aacd3ee51cb78e232157..9ee9c0a70dc5dec5a911d11f163fcfdf9952ec01 100644
--- a/core/themes/classy/templates/user/user.html.twig
+++ b/core/themes/classy/templates/user/user.html.twig
@@ -17,6 +17,7 @@
  *   e.g. account.field_example.en, thus overriding any language negotiation
  *   rule that was previously applied.
  * - attributes: HTML attributes for the container element.
+ * - user: A Drupal User entity.
  *
  * @see template_preprocess_user()
  */