Проверка аутентификации Drupal из внешнего PHP - PullRequest
4 голосов
/ 23 марта 2010

Это может быть просто, но я новичок в Drupal. Организация, в которой я работаю, недавно перешла на Drupal, но в различных внешних файлах PHP все еще есть устаревший код, который было бы неудобно преобразовать для работы в Drupal.

Однако было бы очень неплохо иметь возможность ограничить доступ к некоторым из этих страниц на основании того, что кто-то проходит аутентификацию на Drupal. (Некоторые страницы являются административными и в настоящее время видны всем, кто знает URL, например. Да, плохой дизайн, но это то, что я унаследовал ...)

Как я могу проверить с помощью Drupal из внешнего файла PHP, чтобы проверить, прошел ли аутентификация человек, посещающий данную страницу?

Ответы [ 5 ]

6 голосов
/ 23 марта 2010

Я бы согласился с предложением Rimians зарегистрировать URL-адреса внутри самого Drupal (+1), но в качестве альтернативы вы можете загрузить Drupal «вручную» и после этого проверить разрешение пользователя непосредственно из других скриптов:

// initialize Drupal
// TODO: adjust path according to placement of script (might need to change to Drupal directory first)
require './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// check user access rights
// TODO: Adjust to the permission you want to restrict to, e.g. 'access content' or whatever
if (!user_access('administer nodes')) {
  // Insufficient rights, say so
  drupal_access_denied();
  exit(0);
}
// ... call legacy script

ПРИМЕЧАНИЕ: Drupal выполняет довольно много работы во время начальной загрузки, включая некоторые манипуляции и установку глобальных переменных, поэтому обязательно проверяйте внимательно на наличие помех / конфликтов с унаследованным кодомПодать заявку на предложение Rimians).

Если вы хотите ограничить доступ только для аутентифицированных пользователей, вы можете заменить user_access() на user_is_logged_in().Если вы хотите проверить по роли, вы можете добавить global $user; и проверить содержимое $user->roles массива

5 голосов
/ 23 марта 2010

Вам нужно будет включить эти URL в маршрутизатор меню, чтобы Drupal мог загрузить и проверить ваши разрешения. Тогда вам нужно будет найти сторонний PHP для запуска в виде включаемого файла или, возможно, через интерфейс.

Требуется некоторая умная пользовательская работа, но, возможно, не слишком сложная. :)

1 голос
/ 25 июня 2013

этот файл должен быть внутри установки 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';
}
0 голосов
/ 22 октября 2013

Я собираюсь сделать то же самое. Я сделал компонент UserlandSession именно для таких случаев; это чистая реализация сессий PHP, полностью независимая от нативных сессий PHP.

В Drupal вы сохраняете информацию о пользователе в сеансе, а затем имеете доступ к сеансу в любом другом PHP-коде.

Используйте скрипт для получения экземпляра ...

<?php // getSessionInstance.php

use Shibalike\Util\UserlandSession\Storage\Files;
use Shibalike\Util\UserlandSession;

return new UserlandSession(
    new Files('MySession', array('path' => '/path/to/session/storage'))
);

В Drupal:

<?php
$sess = (require 'path/to/getSessionInstance.php');
$sess->start();
$sess->set('user', $GLOBALS['user']);

В других приложениях:

<?php
$sess = (require 'path/to/getSessionInstance.php');
$sess->start();
$userInfo = $sess->get('user');
0 голосов
/ 23 марта 2010

Drupal сохраняет аутентификацию пользователя в сеансе.Однако он использует свою собственную пользовательскую обработку сеанса (см. Include / bootstrap.inc, где он присоединяет пользовательские обработчики и включает / session.inc для функций обратного вызова).Если вы используете ту же функцию обработки сеанса, вы можете получить доступ к данным сеанса Drupal, чтобы проверить, прошел ли пользователь аутентификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...