diff --git a/core/modules/user/src/AccountSettingsForm.php b/core/modules/user/src/AccountSettingsForm.php
index 1e5cd49..8f15dd9 100644
--- a/core/modules/user/src/AccountSettingsForm.php
+++ b/core/modules/user/src/AccountSettingsForm.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
+use Drupal\Core\Datetime\DateFormatterInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -29,17 +30,27 @@ class AccountSettingsForm extends ConfigFormBase {
   protected $roleStorage;
 
   /**
+   * The date formatter service.
+   *
+   * @var \Drupal\Core\Datetime\DateFormatterInterface
+   */
+  protected $dateFormatter;
+
+  /**
    * Constructs a \Drupal\user\AccountSettingsForm object.
    *
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The factory for configuration objects.
+   * @param \Drupal\Core\Datetime\DateFormatterInterface
+   *  The date formatter service.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   The module handler.
    * @param \Drupal\user\RoleStorageInterface $role_storage
    *   The role storage.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, RoleStorageInterface $role_storage) {
+  public function __construct(ConfigFactoryInterface $config_factory, DateFormatterInterface $date_formatter, ModuleHandlerInterface $module_handler, RoleStorageInterface $role_storage) {
     parent::__construct($config_factory);
+    $this->dateFormatter = $date_formatter;
     $this->moduleHandler = $module_handler;
     $this->roleStorage = $role_storage;
   }
@@ -49,9 +60,7 @@ public function __construct(ConfigFactoryInterface $config_factory, ModuleHandle
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('config.factory'),
-      $container->get('module_handler'),
-      $container->get('entity.manager')->getStorage('user_role')
+      $container->get('config.factory'), $container->get('date.formatter'), $container->get('module_handler'), $container->get('entity.manager')->getStorage('user_role')
     );
   }
 
@@ -181,6 +190,29 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       }
     }
 
+    // Build the TTL options list for the one-time login link.
+    $timeout_scale = array(
+      3600, // 1 hour.
+      7200, // 2 hours.
+      14400, // 4 hours.
+      28800, // 8 hours.
+      43200, // 12 hours.
+      86400, // 1 day.
+      172800, // 2 days.
+      604800, // 1 week.
+      1209600, // 2 weeks.
+    );
+    $timeout = array_map(array($this->dateFormatter, 'formatInterval'), array_combine($timeout_scale, $timeout_scale));
+
+    // Configure one-time login link timeout.
+    $form['registration_cancellation']['user_pass_reset_timeout'] = array(
+      '#type' => 'select',
+      '#title' => t('How long will a one-time login link be valid?'),
+      '#options' => $timeout,
+      '#default_value' => $config->get('password_reset_timeout'),
+      '#description' => t('Select how long the one-time login link will be valid. Default is one day.'),
+    );
+
     // Default notifications address.
     $form['mail_notification_address'] = array(
       '#type' => 'email',
@@ -431,6 +463,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       ->set('password_strength', $form_state->getValue('user_password_strength'))
       ->set('verify_mail', $form_state->getValue('user_email_verification'))
       ->set('cancel_method', $form_state->getValue('user_cancel_method'))
+      ->set('password_reset_timeout', $form_state->getValue('user_pass_reset_timeout'))
       ->set('notify.status_activated', $form_state->getValue('user_mail_status_activated_notify'))
       ->set('notify.status_blocked', $form_state->getValue('user_mail_status_blocked_notify'))
       ->set('notify.status_canceled', $form_state->getValue('user_mail_status_canceled_notify'))
diff --git a/core/modules/user/src/Tests/UserAdminTest.php b/core/modules/user/src/Tests/UserAdminTest.php
index 6569ad2..350d229 100644
--- a/core/modules/user/src/Tests/UserAdminTest.php
+++ b/core/modules/user/src/Tests/UserAdminTest.php
@@ -149,7 +149,7 @@ function testUserAdmin() {
   /**
    * Tests the alternate notification email address for user mails.
    */
-  function testNotificationEmailAddress() {
+  public function testNotificationEmailAddress() {
     // Test that the Notification Email address field is on the config page.
     $admin_user = $this->drupalCreateUser(array('administer users', 'administer account settings'));
     $this->drupalLogin($admin_user);
@@ -197,4 +197,21 @@ function testNotificationEmailAddress() {
     $this->assertTrue(count($user_mail), 'New user mail to user is sent from configured Notification Email address');
   }
 
+  /**
+   * Test saving TTL for the one-time login link on resetting a user password.
+   */
+  public function testOneTimeLoginLinkTTL() {
+    // Create an admin user who changes the TTL of the one-time login link.
+    $admin_user = $this->drupalCreateUser(array('administer account settings'));
+    $this->drupalLogin($admin_user);
+    $this->drupalGet('admin/config/people/accounts');
+    // Set the time to 1 hour.
+    $edit['user_pass_reset_timeout'] = 3600;
+    $this->drupalPostForm("/admin/config/people/accounts", $edit, t('Save configuration'));
+    // Check the stored value after form submit, should be 1 hours.
+    $config = $this->config('user.settings');
+    $ttl = $config->get('password_reset_timeout');
+    $this->assertEqual($ttl, 3600, 'Testing the stored ttl of password reset in the configuration');
+  }
+
 }
