从非Drupal php应用程序使用Drupal的授权

时间:2012-11-01 06:37:22

标签: php drupal authentication drupal-7 drupal-modules

我为孩子们写了一些教育网络应用程序(HTML,js)。我已经到了需要开始逐个跟踪他们的进度的地步,因此应用程序可以更多地关注个人仍需要学习的内容,并花更少的时间重复他们已经熟悉的内容。

为此,我创建了一个Drupal站点,其中包含每个孩子的登录信息。一旦他们通过Drupal登录,我想让我的应用程序调用一些访问Drupal身份验证状态的php页面(我将编写)。

所以我的问题是,如果我正在编写查询或更新数据库的php页面,这些页面如何首先确定用户是否登录到该站点上的Drupal,如果是,请获取当前的名称认证用户?

非常感谢任何指示。

5 个答案:

答案 0 :(得分:3)

使用此代码(取自Drupal的index.php)

开始您的页面
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

如果脚本与Drupal的index.php不在同一个文件夹中,则可能需要调整路径。

然后,您可以在脚本中完全访问Drupal API,并且将加载用户的会话。在上面的建议起作用之前,您需要使用此代码引导Drupal。从那里,你可以做到

global $user;
print_r($user);

现在你可以做以下事情:

$other_user = user_load($some_user_id);

从长远来看,你可以通过将其构建为Drupal模块获得很多好处。

答案 1 :(得分:2)

我认为从PHP脚本创建Drupal模块更容易。您不必担心身份验证。只是我的观点。

答案 2 :(得分:2)

您可以使用services module

  

集成外部应用程序的标准化解决方案   Drupal的。服务回调可以与多个接口一起使用   REST,XMLRPC,JSON,JSON-RPC,SOAP,AMF等。这允许Drupal   站点使用时通过多个接口提供Web服务   相同的回调代码。

<强>更新

如果是这种情况,您可以在drupal中编写代码。无需外部应用程序。

要查找当前登录的用户,请使用以下代码示例:

global $user;
print_r($user); // print out the user object

希望这有帮助......穆罕默德。

答案 3 :(得分:1)

此问题的答案如下:Drupal - using boostrap to check logged in user outside of Drupal not working

引导代码有效,您只需在settings.php中设置$ cookie_domain

答案 4 :(得分:0)

这个文件应该在drupal安装里面 很容易

//set the working directory to your Drupal root
define("DRUPAL_ROOT",     "/var/www/drupal/");

//require the bootstrap include
require_once 'includes/bootstrap.inc';

//Load Drupal
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 
//(loads everything, but doesn't render anything)

$name = 'admin';
$password = 'admin';

//use drupal user_authenticate function
if(!user_authenticate($name, $password)){
    echo 'invalid';
}else{
    echo 'valid';
}