Небольшой совет по авторизации пользователя из внешнего скрипта |

Введение

Сегодня я поделюсь своим опытом по аутентификации пользователей на уровне сервера.Сразу скажу, это не единственный способ защиты информации. Сервер Apache предполагает три варианта разрешения вопроса, будет ли в ответ на запрос предоставлен конкретный ресурс.

Критерии, которыми он пользуется, — это аутентификация, авторизация и управление доступом. И мало того, тот способ, что я опишу ниже можно расширить функционалом — в статье мы рассмотрим лишь базовый функционал, который может послужить отправной точкой и инструкцией к дальнейшим действиям.

Попытаемся себе представить, для чего нам это нужно.

  • Делаете работу для заказчика и нельзя пускать на сайт никого кроме вас и клиента
  • Не хотите показывать сайт обществу и лишь несколько людей должны иметь доступ к нему
  • Не хотите показывать недоделанную работу — сайт в процессе разработки (Under Construction)
  • Пускать на сайт, кроме привелигированного пользователя, нет никакого для вас резона
  • Другая причина

Как правило аутентификацией называется любой процесс, с помощью которого проверяется, что некто является именно тем, за кого себя выдаёт. Обычно, такая проверка ограничивается вводом имени пользователя (login) и пароля (password), но может включать в себя любой другой метод, определяющий т.н. тождественность.

[решено] добавить друпаловскую авторизацию внешнему скрипту |

У меня есть скрипт (обрабатывает AJAX — запросы), когда я его вставляю сниппетом в страницу, то обновление информации на странице происходит с задержкой 4-5 секунд. Причем данные в базу записываются сразу же после нажатия кнопки отправить (без задержек), а потом в течение 5 секунд обновляется информация на странице (сперва ничего не происходит, потом сразу меняется).
Я так понимаю, что запрос на сервер уходит, генерируется эта же страница, и из нее данные отправляются в открытую страницу.

Похожее:  МЕДИА.ОНФ

В связи с этим у меня возникла идея запросы отправлять на отдельный php-скрипт. Я попробовал этот сниппет использовать как отдельный файл, в этом случае все действительно работает мгновенно, но в этом случае нет данных о залогиненном пользователе, т.е. я просто для отладки прописал UID в скрипте.

Как можно к отдельному скрипту добавить друпаловскую авторизацию чтобы получать UID? Или как создать максимально облегченную друпаловскую страницу без всяких меню и блоков, с одним сниппетом?

Disclaimer

Итак, с данного момента багрепорты типа «ничего не работает, помогите» игнорируются. Багрепорты связанные с некорректным отображением элементов в нестандартных темах оформления игнорируются, так как они легко локализуются Firebug’ом и исправляются правкой CSS.

В случае с исчезновением кнопки share, проблема может быть из-за текста поста, по этому попробуйте создать тестовый пост, с 1 простым предложением и сохранить его, если кнопка в таком посте появилась, то продолжайте добавлять в него по 1-2 предложения из поста, в котором кнопка не появляется.

Конфигурирование

Защита сайта может быть выполнена в 3 шага

  • Создание файла паролей
  • Конфигурирование Apache для работы с файлом паролей
  • Создание групп пользователей (опционально)

Небольшой совет по авторизации пользователя из внешнего скрипта |

Сначала это был вопрос, но по ходу сам разобрался и вопрос превратился в совет Smile Задача: залогинить пользователя из внешнего скрипта. Скрипт может находиться не только в корне сайта, а например в поддиректории. Из корня сайта всё получается:

<?php

// …что-нибудь делаем

include(‘./includes/bootstrap.inc’);
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

user_authenticate(array(‘name’ => ‘admin’, ‘pass’ => ‘*****’));

// …теперь мы залогинены на сайте, можно делать что-нибудь ещё
?>

Конструкция выше, помещённая в сторонний скрипт производит инициализацию друпала, логин юзера, возвращает куки — всё ок. Но когда скрипт находится во вложенной директории, это не срабатывает, даже если сделать chdir() в корень сайта. На самом деле, чтобы это работало нужно явно указать $base_url друпала! Указать его можно либо в settings.php, раскомментировав строку $base_url, или во внешнем скрипте, как удобней:

<?php

include(‘./includes/bootstrap.inc’);
$conf[‘base_url’] = ‘http://example.com‘;
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

user_authenticate(array(‘name’ => ‘admin’, ‘pass’ => ‘*****’));

?>

От слов, к делу

Шаг первый.Пишем в секции <VirtualHost> вашего сайта:

Работа модуля

Логика работы модуля:

  1. после нажатия пользователем кнопки «войти вКонтакте» модуль получает необходимые данные от сервера вКонтакте.
  2. Далее модуль проверяет есть ли в базе данных Друпала пользователь, связанный с именем, полученным от вКонтакте:
    • если его нет, то создается новый пользователь и связывается с id пользователя ВКонтакте. Внимание! Важная деталь. Если в базе данных есть пользователь с именем не связанным с учетной записью вКонтакте и из вКонтакте приходит пользователь с таким же именем, то такие две учетные записи не будут связаны, для имени нового пользователя будет просто добавлен суффикс _N, где вместо N будет подставлено число.
    • если связанный с учетной записью ВКонтакте пользователь есть, то будет использована найденная учетная запись.
  3. Выбранный пользователь авторизуется в системе.
  4. ВКонтакте не отдает адрес электронной почты, по этому модуль предлагает новому пользователю указать свой e-mail в настройках своего нового аккаунта.