Авторизация

Для авторизации пользователей используется nodejs библиотека passport и его расширение LocalStrategy.

Весь код расположен в файле src/passport.js

В качестве особенностей реализации, следует обратить внимание на события, которые инициирует библиотека при попытках пройти авторизацию - localauth.

var passport = require('passport');
var LocalStrategy  = require('passport-local').Strategy;
var mongoose = require('mongoose');
var event = require('events').EventEmitter;

passport.Events = new event();

passport.use(new LocalStrategy(
  function(username, password, done) {
    username = (username+'').toLowerCase().trim(); 
    mongoose.model('user').findOne({ LoginUser: username }).isactive().exec(function (err, user) {
      if (err) { 
        return passport.Events.emit('localauth',{status:"error",message:err,username:username});
      }
      if (!user) {
        return passport.Events.emit('localauth',{status:"error",message:"wrongusername",username:username});
      }
      if (!user.IsConfirmed) {
        return passport.Events.emit('localauth',{status:"error",message:"notconfirmed",username:username});
      }
      if (!user.checkPassword(password)) {//
        return passport.Events.emit('localauth',{status:"error",message:"wrongpassword",username:username});
      }
      passport.Events.emit('localauth',{status:"success",user:user._id,username:username});
    });
  }
));


module.exports = passport;

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

Например, модуль audit следит за количеством попыток, блокирует учетную запись при большом количестве ошибок авторизации и оповещает администратора о подозрительном поведении пользователей. Для своей работы ему достаточно подписаться на события localauth.+

Использование библиотеки passport было выбрано с перспективой на вырост. К этой библиотеке написано множество плагинов авторизации включая стандарты OAuth1, OAuth2, LDAP и др.

Пока система авторизации работает только по паре Логин + Пароль.

Last updated