Нужна помощь в понимании того, как работает NodeJS / PassportJS - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть следующие 3 фрагмента кода, взятые из рабочего проекта, который я скачал из интернета:

файл: . / Rout.js

// ...
var passport = require('passport');
var requireLoginLocal = passport.authenticate('local', { session: false });
var authController = require('./controllers/authController');
// ...

module.exports = function(app) {
	// ...
	authRoutes.post('/login/local', requireLoginLocal, authController.login);
	// ...
}

файл: . / Config / passport.js

// ...
var LocalStrategy = require('passport-local').Strategy;
// ...

module.exports = function(passport) {
    passport.use(new LocalStrategy({
            usernameField: 'email' /* changing default */
        },
        function(email, password, done) {
            email = email.toLowerCase();
            User.findOne({
                    'email': email
                },
                function(err, user) {
                    if (err) {
                        return done(err);
                    }
                    if (!user) {
                        return done(null, false, { error: 'Login failed. Please try again.' });
                    }
                    user.comparePassword(password, function(err, isMatch) {
                        if (err) {
                            return done(err);
                        }
                        if (!isMatch) {
                            return done(null, false, { error: 'Login failed. Please try again.' });
                        }
                        return done(null, user);
                    });
                }
            );
        }
    ));
};

файл: . / Controllers / authController.js

// ...
exports.login = function(req, res, next) {
	var userInfo = getUserInfo(req.user);
	res.status(200).json({
		token: 'JWT ' + generateToken(userInfo),
		user: userInfo
	});
}
// ...

У меня есть следующие вопросы:

1- В файле: ./routes.js, в строке:

authRoutes.post('/login/local', requireLoginLocal, authController.login);

как данные передаются от 2-го к 3-му аргументу?

2- В файле: ./config/passport.js, как влияют эти возвращаемые значения на передаваемые значенияот 2-го до 3-го аргумента в строке выше?

3- В файле: ./controllers/authController.js, в функции: exports.login, там ничего не возвращается, так как это влияетзначения, переданные из 3-го аргумента и возможного 4-го аргумента в гипотетической строке, подобной приведенной выше?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Ответы на ваши вопросы:

  1. См. Официальную экспресс-документацию .
  2. Это основная функциональность passportjs, она действует как промежуточное ПО аутентификацииобратитесь к локальной паспортной документации .
  3. . Для одного маршрута может быть несколько обратных вызовов, но только если это зависит от предыдущего обратного вызова.Кроме того, любой обратный вызов маршрута может завершить весь перевод элемента управления в следующий поток обратного вызова, отправив ответ со статусом клиенту.
0 голосов
/ 26 апреля 2018

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

В моем понимании и простых терминах, они являются функциями, которые передают запрос,Res объекты ( информация здесь ), добавляя к ним свои изменения.

enter image description here

В вашем коде вам требуетсяLoginLocal добавитк объекту ответа, что ему нужно, и вызывает далее, в этом случае узел передает объект ответа в authController.login и так далее.Когда все промежуточное программное обеспечение в цепочке внесло необходимые изменения, окончательный ответ отправляется как http response

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

passport.authenticate('local', { session: false });

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

...