好的,我觉得我足够了解您,可以尝试回答;不幸的是,这可能不是您要寻找的答案,因为您似乎想使用 oAuth 验证管理员身份,而不是使用标准 Admin API 登录。您会注意到几乎没有 oAuth 登录模块支持这种类型的管理员身份验证(我一直在使用:https://www.drupal.org/project/gauth)——事实上,这将是对 Drupal 核心 API 的巨大修改,而不是对其的扩展,所以我会担心关于使用任何尝试过的东西。
在我们开始之前,我强烈建议完全禁用用户 #1 并使用具有管理员访问权限的其他用户来执行您的管理员操作。更多关于为什么你应该这样做的信息here。
你说:
用户可以通过扩展使用他们的 drupal 站点进行内容管理,而无需专门登录该站点
但是,无论如何,您需要对用户进行身份验证,否则您怎么能相信他们应该以管理员身份发布?您会注意到 Drupal 使用会话数据来保持用户会话处于活动状态。让我们看一个为您提供管理员访问权限的 cookie 示例:
cookie value domain path expires HTTP
SESS92fe1e89dd2d30d5c7ef053b44d061s5 bJzbNlFKnbwvoTOH8A1XBWHipcRPnC32wOBdAJiEmJg example_domain.com / 2015-07-09T21:46:07.841Z true
我在一秒钟前创建了该 cookie,因此您可以看到,默认情况下,Drupal 管理员 cookie 在用户计算机上保持有效不到一个月。有多种方法可以将此会话数据导入您的应用程序,最简单的方法是使用 <iframe> 包装器。 iframe 登录可以与 Drupal 一起使用,并在此处进行了测试:http://jsfiddle.net/z1rrj4ky/
只需制作您自己的自定义登录页面和模块,使其样式与您的扩展程序的其余部分一样。一旦您将管理 cookie 返回到您的应用程序,您甚至不需要 Drupal 管理主题页面来发布内容。您只需要通过包含它们来访问 Drupal API 函数。快速实现此目的的一种方法是将 Drupal 安装在本地安装到具有目标服务器数据库的应用程序中。您可以通过修改位于:<drupal_root>/sites/default/settings.php 或在某些情况下:<drupal_root>/sites/default/default.settings.php 的设置文件将扩展的数据库设置为与目标数据库链接如果您需要访问多个数据库,则不需要多个安装 Drupal,只需更改 environment var 或根据来自 constants 的 var 重新定义设置。
完成所有设置后,您就可以随心所欲地提供内容发布页面。如果您不想使用自定义主题来使用 Drupal 管理界面,只需以编程方式创建内容并随心所欲地提供它们 - 即使是从 Drupal 根文件夹之外。
例如:
// get access to Drupal API functions from outside of Drupal
// This example assumes a sibling directory to the Drupal directories
// it can be easily modified to instantiate from directories much
// further away or deeply nested
$path = $_SERVER['DOCUMENT_ROOT'];
$base_url = 'http://'.$_SERVER['HTTP_HOST'];
chdir($path);
define( 'DRUPAL_ROOT', getcwd() );
require_once './includes/bootstrap.inc';
require_once DRUPAL_ROOT . '/includes/common.inc';
require_once DRUPAL_ROOT . '/includes/module.inc';
require_once DRUPAL_ROOT . '/includes/unicode.inc';
require_once DRUPAL_ROOT . '/includes/file.inc';
require_once DRUPAL_ROOT . '/includes/session.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// now you can use all drupal functions:
// For example, let's check if current user is admin:
global $user;
$user_array = (array) $user;
if ( array_key_exists ( 3, $user->roles ) ) {
$user_type = "admin"; // admin to save the day!
} else {
$user_type = "user"; // not an admin, can't post or edit content doh!
}
验证用户拥有发布和编辑权限后,如果您反对将本机管理员包装器与自定义主题一起使用,您会发现有很多教程向您展示如何以编程方式创建或编辑内容;例如 - https://www.drupal.org/node/1388922 向您展示如何以编程方式创建节点。
回顾:
- 禁用用户 #1 并使用其他管理员帐户
- 使用 iframe 进行身份验证,如果您真的反对,您可以在扩展程序中使用 oAuth 进行身份验证,使用令牌成功回调发布到另一个页面,该页面将
environment variables 或 constants 从散列 SQL 表条目发布到身份验证 Drupal 管理员看到它的用户。如果你这样做肯定散列 contants 或环境变量或其他什么。
- 通过修改
<drupal root>/sites/default/ 文件夹中的settings.php,确保您的Drupal 本地扩展版本已连接到目标站点的数据库
- 一旦您通过身份验证和验证,您就可以连接到正确的数据库,您可以使用自定义主题使用本机 Drupal 界面来处理发布或编辑内容,或者使用上述代码的调整来引导 Drupal 以实例化 D6或您项目中任何位置的 D7 API。
祝你好运!