Drupal - использование boostrap для проверки вошедшего в систему пользователя вне Drupal не работает - PullRequest
5 голосов
/ 29 июля 2010

Я вырываю свои волосы, пытаясь понять это.Я не могу заставить Bootstrap работать должным образом за пределами Drupal dir.Он работает нормально, если я запускаю этот код в директории Drupal, но на один уровень выше не работает.

Мой путь к Drupal: / public_html / drupal /.Сценарий, который я запускаю, находится в /public_html.

$ user не возвращает зарегистрированного пользователя.Я убедился, что это не междоменная проблема (например, www.domain.com против domain.com).

chdir('/path/to/drupal');

include_once('./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
global $user;

if ($user->uid) {
    print "Logged in";
} else {
   print "Logged out";
}

Ответы [ 2 ]

6 голосов
/ 29 июля 2010

Если пользователь не распознается Drupal в вашем отдельном скрипте, велика вероятность, что он не получит надлежащий файл cookie сеанса.Вам следует проверить файлы cookie, установленные при обычной установке Drupal, и посмотреть, отправляются ли они и на ваш скрипт.Если нет, проверьте переменную $cookie_domain в вашем Drupals settings.php - обычно она закомментирована, но вам может потребоваться установить ее явно в вашем случае.

2 голосов
/ 29 июля 2010

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

Одна вещь, которую вам не хватает, это $base_url.Для этого нужно указать URL-адрес сайта Drupal, который вы хотите увеличить (например, $base_url = "http://example.com").

Другая вещь, с которой вы столкнетесь, но похоже, что вы уже позаботилисьЭто то, что ваш скрипт и Drupal должны иметь одинаковое полное доменное имя.Установка скрипта на http://foo.example.com и включение Drupal на http://example.com не будут работать.Так что, если Drupal не живет на http://example.com/drupal, а ваш сценарий живет на http://example.com, ваш скрипт всегда будет возвращать объект анонимного пользователя.


Редактировать

Вы могли бы иметь свой сценарий в полном доменном имени, которое не совпадает с Drupal (например, если у вас есть сайт Drupal на http://drupal.example.com, который указывает на /var/www/drupal, а ваш сценарий на http://external.example.com/test.phpчто указывает на /var/www/test.php, но в этом случае вам нужно было бы войти на http://external.example.com/drupal вместо http://drupal.example.com.

...