home
Hero image for: Resetting the administrator password with sql-query in Drupal 8

Resetting the administrator password with sql-query in Drupal 8

By Eduardo García ● CTO | December 7th, 2014

The Problem

When in Drupal 8, the password for user #1 (the administrator) is lost and the email notification don’t work, it is possible to set the password via a database query.

Right now we are in the middle of the development of Drupal 8 and the usual command drush uli provided by Drush doesn’t work.

Right now when I try to execute that command, I got the following error.

Fatal error: Call to undefined function url() in 
/Users/enzo/.composer/vendor/drush/drush/commands/user/user.drush.inc 
on line 466 Drush command terminated abnormally due to an unrecoverable 
error.

The Solution

##Generate a new password

First, you have to generate a password hash that is valid for your site.

Execute the following commands from the command line, in the Drupal 8 root directory:

$ php core/scripts/password-hash.sh 'your-new-pass-here'

password: your-new-pass-here    
hash: $S$EV4QAYSIc9XNZD9GMNDwMpMJXPJzz1J2dkSH6KIGiAVXvREBy.9E

Be careful not to include more or fewer characters as the hash. These hashes look somewhat like $S$EV4QAYSIc9XNZD9GMNDwMpMJXPJzz1J2dkSH6KIGiAVXvREBy.9E.

We will use the generated password later.

Update the user password.

Now you need to update the user password, in our case, we need to update the Administrator password, fortunately, the UID for Administrator is 1 equal to previous versions of Drupal.

With the new password, we need run the following SQL statement.

UPDATE users_field_data 
SET pass='$S$E5j59pCS9kjQ8P/M1aUCKuF4UUIp.dXjrHyvnE4PerAVJ93bIu4U' 
WHERE uid = 1;

Dealing with Cache

At this point, if you try to login in the Drupal 8 website you will be rejected, it’s because the login system doesn’t read directly the table users_field_data instead of a cache for entities are used.

To flush the cache for a specific user entity with compromise the rest of cache of your system you can use the following SQL statement.

DELETE FROM cache_entity WHERE cid = 'values:user:1';

Now you can grab a cup of coffee/tea and enjoy your Drupal 8 website.

I hope you found this article useful.