某些托管环境不允许SSH访问安装了Drupal站点的Web服务器,这使得无法通过命令行恢复Drupal 8管理员帐户密码。当基于命令行的密码恢复技术不起作用时,应采用以下方法作为“最后的选择”。
下文所述的密码重置方法使用必须上传到Web服务器的PHP脚本来重置管理员密码。若要成功执行此方法,必须具有将PHP文件上传到托管站点的服务器的功能。
在后台,PHP脚本执行完整的Drupal引导程序,以便获得对生成管理密码的必要功能的访问,然后使用通过Web浏览器执行脚本时通过URL指定的新密码来更新数据库。 。
注意:重设密码后,在服务器上保留此密码重设脚本是一个非常关键的安全漏洞,任何人都可以重设管理员密码。仔细使用此脚本,并在使用完脚本后始终将其删除。
首先,创建一个具有随机名称的文件(例如gh34tu9.php)。
将以下内容复制并粘贴到文件中,然后保存文件。<?php
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
if (pathinfo(__FILE__, PATHINFO_FILENAME) == 'admin-pass-reset') {
die('Please change your file name to a random string to continue');
}
// Boot Drupal.
$autoloader = require __DIR__ . '/autoload.php';
$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod', FALSE);
$kernel->boot();
// Get password hasher service.
$password_hasher = $kernel->getContainer()->get('password');
// Hash password.
if (isset($_GET['pass']) && !empty($_GET['pass'])) {
$newhash = $password_hasher->hash($_GET['pass']);
}
else {
die('Retry with ?pass=PASSWORD set in the URL');
}
// Update user password.
$updatepass = Drupal::database()->update('users_field_data')
->fields(array(
'pass' => $newhash,
// 'name' => 'admin',
//'mail' => 'yourmail@example.com'
))
->condition('uid', '1', '=')
->execute();
// Clean user 1 cache.
Drupal::cache('entity')->delete('values:user:1');
print "Done. Please delete this file as soon as possible";
将文件上传到Drupal安装目录的根目录(即存在index.php,update.php,robots.txt和其他文件和目录的位置)。
通过使用以下URL模式 在Web浏览器中请求文件来执行脚本:在上述URL中, -替换为您的实际域名, -替换为您在上面第一步中指定的实际文件名, -替换为所需的新密码。 注意:强烈建议您选择一个密码。http://example.com/gh34tu9.php?pass=mypassword
如果脚本执行成功,您将在Web浏览器中看到文本“完成”。安装Drupal时创建的管理帐户的密码(即user / 1)将更改为“ mypassword”(或您指定的任何值)。
最后,从Drupal安装根目录中删除该文件。
重置管理员帐户用户名
如果您不记得(或根本不知道)管理员帐户的用户名,请在上面的脚本中将更改
// 'name' => 'admin',为,并且用户名也将更改为“ admin”。您也可以通过相同的方式来重置管理员的电子邮件地址,方法是“取消注释”(删除)上面脚本中的电子邮件地址行。 'name' => 'admin',//
为了您的方便,上面脚本的源文件附在ZIP文件内的下方。您可以下载该zip文件,然后将其解压缩,然后将其上传到服务器。确保将文件名更改为原始名称以外的其他名称。最后,不要忘记在更改密码后立即删除文件。
本文档包含不安全的代码
欢迎您对此页面进行编辑。但请不要将其状态更改为“不安全代码”以外的任何其他内容。