Страница авторизации - goshaQ/iu-practice-as GitHub Wiki
Да будет так
Начнем с того, что все крутится при помощи NodeJS и необходимых модулей. Сами страницы авторизации написаны на HTML, красота наведена при помощи CSS. Данные, которые мы получаем от роутера и используем на страницах авторизации вставляются при помощи шаблонизатора HandlebarsJS. Это небольшое введение, дальше все распишем подробно.
Установка необходимого
Прежде всего нам нужно установить сам NodeJS. На виртуальной машине у нас стоит CentOS, поэтому не составит труда установить все через терминал. Для этого воспользуемся следующими командами:
При помощи команды wget выкачаем архив:
wget http://nodejs.org/dist/v0.10.30/node-v0.10.30.tar.gz
Вытащим все файлы из архива:
tar xzvf node-v* && cd node-v*
Также нам необходимы следующие пакеты для успешной работы:
sudo yum install gcc gcc-c++
Сконфигурируем и скомпилируем все необходимое:
./configure
make
Установка:
sudo make install
И проверим, что установка выполнена успешно:
node --version
v0.10.30
Теперь перейдем к установке модулей. При помощи команды:
sudo npm install --save <module_name>
установим следующие модули:
- body-parser
- express
- express3-handlebars
- fs
- http
- https
- node-telegram-bot-api
- passport
- passport-vkontakte
- pg
- sms_ru
- util
Как происходит обмен данными на словах
- Пользователь хочет воспользоваться интернетом
- Если он уже зарегистрирован, то доступ у него есть. Если же нет, роутер отправляет его на страницу авторизации, которая лежит на нашей виртуальной машине, параллельно отправляя post-запрос с информацией на пользователя.
- Сервер принимает данные от роутера и показывает пользователю страницу авторизации
- Пользователь выбирает удобный для него способ авторизации (на данный момент, через SMS, VK, Telegram и AD)
- Пользователь вводит необходимую для нас информация. Во всех случаях, кроме AD, введенные пользователем данные отправляются в таблицу radcheck и если он уже там есть, то просто обновляется необходимая информация. Затем эти же данные отправляются post-запросом на адрес роутера, чтобы проверить, что этому пользователю с такими-то данными можно войти в интернет.
- В случае успеха - редирект на тот сайт, куда хотел пользователь, либо просто открытие доступа в сеть. Иначе, повторная регистрация.
Работа сервера
На страницу "/" приходят данные о пользователе от роутера через post-запрос. Сервер сохраняет необходимую информацию и рендерит пользователю страницу авторизации. Дальше все зависит от того, какой тип авторизации выбрал пользователь.
-
Если пользователь авторизуется через SMS, то после ввода номера своего телефона в поле ввода, сервер записывает введенный номер и рендерит страницу ввода кода, с необходимыми вставками в HTML код через Handlebars. В это же время в таблице radcheck проверяется, регистрировался ли этот пользователь ранее. Если да, то к его номеру привязывается новый код. Если же нет, то создается новая запись об этом пользователе. После ввода кода на странице, данные отправляются post-запросом на роутер.
-
Если он решил пройти авторизацию ка студент/сотрудник Университета, то сервер отправляет ему страницу ввода данных AD и снова post-запросом отправляет введенные данные на роутер.
-
Если пользователь выбрал авторизацию через VK, то сервер отправляет его на страницу авторизации, где он вводит свои данные для входа в социальную сеть и авторизуется. Нам на сервер приходит callback о том, что этот пользователь прошел авторизацию через VK и из Сallback'a мы вытаскиваем необходимую на информацию, а именно id страницы пользователя. Затем заносим его данные в таблицу radcheck и отправляем его на страницу, где находится только кнопка "let me in"б которая отправляет данные на роутер.
-
Ну и самая интересная часть авторизации - авторизация через Telegram Bot. В этом случае мы отправляем пользователя на сайт Телеграма к боту, который создает логин и пароль авторизации и отправляет его пользователю вместе со ссылкой на страницу, на которой нужно ввести эти данные. И снова мы заносим информацию о пользователе в таблицу - id пользователя и код и отправляем post-запрос на роутер.
Как все это запустить
Все необходимые файлы уже лежат на виртуальной машине. Для запуска нужно перейти в папку со всеми файлами и запустить наш сервер:
sudo node server.js
Вместе со страницей авторизации запускается и Telegram Bot.