Страница авторизации - 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.