Авторизация пользователей Express.js + Mongo

Если базовая авторизация не подходит – пользователи регистрируются сами, а внедрять passport.js не то чтобы рано, но надо разобраться с самого начала как оно работает. То здесь описан механизм хранения авторизации пользователя (его сессии) в Mongo, хотя можно заменить на любое поддерживаемое в express-session.

Чем cookies, отличаются от session. Сессии хранятся на сервере, ну точнее, где-то не на клиенте. Но, на клиенте в cookies хранится идентификатор сессии на сервере.
А cookies соответственно хранятся полностью на клиенте.

Модель пользователя

Для того чтобы создавать новых пользователей и проверять потом на соответствие логин/пароль будем использовать Mongoose. Первым делом надо описать модель пользователя. Файл модели может лежать где угодно, папка db/models в корне проекта вполне подойдёт.

Кстати, все примеры описанные здесь основаны на базовом express приложении, том самом которое создаётся по команде в консоли express ./.

Одной модели к сожалению мало, надо создать функции необходимые для управления моделью. Создайте файл api.js в корне проекта, и вставьте следующее содержимое.

Сессии! Полный вперёд!

Конечно, можно дополнить любыми своими полями, email или фотография. Так, модель готова, теперь необходимо подключить управление сессиями в приложение. Установите модули:

espress-session – необходим для управления сессиями
connect-mongo – хранение идентификаторов сессий в базе данных Mongo

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

Механизм

Приготовления приготовлены, пришла пора создать пользователя. Несколько middleware для всех CRUD операций будут содержать всю логику управления пользователями (ну, кроме удаления, но это домашняя работа). У вас уже есть файл users.js в папке routes, замените его содержимое.

Уже сейчас вы можете создать пользователя. Для этого откройте любой сервис который умеет отправлять POST запрос (Postman) и предварительно запустив приложение npm start отправьте POST-запрос:

Postman

Всё, можно проверить базу данных, где в коллекции users вы найдёте первого пользователя.

Шаблон

Осталось реализовать логин и деавторизацию. Замените файл с обработкой запросов на главную страницу, тот что index.js в папке routes. Следующим содержимым.

А шаблон формы регистрации/авторизации при помощи шаблонизатора jade может выглядеть так (замените содержимое index.jade):

Запускайте приложение, авторизуйтесь. И ищите в базе данных коллекцию sessions, а в консоли Google Chrome куки с идентификатором сессии. По-моему, круто, теперь можно делать свой Facebook/ВКонтакте.

Хранение сессий в MongoDB

Хранение сессий в MongoDB

3 thoughts on “Авторизация пользователей Express.js + Mongo”

  1. спасибо за пример, это ровно то что мне новичку нужно,
    хотя честно говоря я так и не смог его оживить.
    поэтому такой вопрос/просьба – а можно от этого поста посмотреть исходники? конечный вариант.

    например вот в user.js:

    var UserModel = mongoose.model(‘User’, User);

    module.exports = mongoose.model(‘User’, UserModel)

    у меня вызывает ошибку:
    Error: The 2nd parameter to mongoose.model() should be a schema or a POJO

  2. Доброго времени суток!

    Спасибо за гайд. Хотелось бы только узнать куда нужно вставить кусок кода, который перед заголовком статьи “Механизм”. Просто в app.js не идет, т.к. в user.js используется session.
    Спасибо еще раз!

Leave a Reply

Your email address will not be published. Required fields are marked *