如何以PHP编程方式登录到Drupal

创作性质
编译加工
文章价格
100
文章作者
李国强
博文内容-公开

有时候网站的管理员希望不通过正常的网站登录表单登录Drupal站点。例如,在忘记登录密码的时候。虽然对于网站超级管理员来说,也许可以通过直接在数据库修改密码字段来解决问题,但是这个不在本文讨论之列。

对于drupal网站,不管是通过drupal默认的登录表单、网站自定义的登录表单或者是REST Web Services性质的接口登录方式,都必然要求密码或者其他方式的验证。那么有没有可能不通过正常的登录方式登录到drupal网站呢?答案是肯定的,而这就是本文要介绍的内容。

最优先的解决方案是在服务器控制台使用 drush user-login 命令。drush user-login 是一个特殊的drush命令,这个命令会生成一个登录drupal网站的链接。命令的详细使用方法可以参考drush官方网站的文档链接:

https://drushcommands.com/drush-8x/user/user-login

但是如果服务器没有安装drush或者你没有权限使用服务器shell,另外一种替代的方案就是通过纯php代码编程方式来进行登录。以下就是drupa8和drupal7网站通过纯php代码编程方式来进行登录的具体步骤:

1. 在drupal 8或者drupal 7网站的根目录下创建名为temp_login.php的文件(当然,也可以是自定义的任意文件名)

2. 分别复制以下对应drupal7和drupal8版本的代码到上述创建的temp_login.php当中,并保存

3. 直接在浏览器当中打开这个文件,例如 yourdrupalsite.com/temp_login.php

需要说明的是,上述代码方式登录到drupal站点只是一种临时性的解决方案,存在非常高的安全风险。因此用过之后需要及时的把文件从服务器及时删除。

以下文章内容需要学习会员权限或者单独购买当前文章的全文阅读权限

博文内容-权限

Drupal 8 当中纯php编程方式登录到drupal网站的代码参考:

<?php

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;

$autoloader = require_once 'autoload.php';

$kernel = new DrupalKernel('prod', $autoloader);

$request = Request::createFromGlobals();
$response = $kernel->handle($request);

// 用户的uid,可以任意设置
$uid = 1;
$user = Drupal\user\Entity\User::load($uid);
user_login_finalize($user);

$response->send();

$kernel->terminate($request, $response);

Drupal 7 当中纯php编程方式登录到drupal网站的代码参考:

<?php

define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

// 用户的uid,可以任意设置
$uid = 1;
$user_obj = user_load($uid);
$form_state = array();
$form_state['uid'] = $user_obj->uid;
user_login_submit(array(), $form_state);

menu_execute_active_handler();

 

 

适用drupal版本
全部或与版本无关