Я реализовал промежуточное ПО для тестирования, которое позволяет мне обходить аутентификацию при локальном запуске, и у меня установлена переменная среды для тестирования. Вот примеры кода:
Моя настройка
const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const mongoose = require('mongoose');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const MongoStore = require('connect-mongo')(session);
const cookieParser = require('cookie-parser');
const testconfig = require('./config/testconfig');
const { ensureAuthenticated } = require('../config/auth');
А затем типичный метод verifyAuthenticated выглядит так в моей аутентификации. js
module.exports = {
ensureAuthenticated: function(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
req.flash('error_msg', 'Please log in to view this resource');
res.redirect('/');
}
}
, которая позволяет мне создать маршруты простым способом, подобным этому:
router.get('/dashboard', ensureAuthenticated, function(req, res) {
res.render('dashboard', {name: req.user.id});
})
Важно отметить, что моя конкретная реализация паспорта дает мне переменную req.user.id, с которой я работаю, которая идентифицирует пользователя, который в данный момент вошел в систему. После создания маршрутов я теперь заблокирован и обязан всегда развертывать свое решение на моем хосте, в моем случае Herokuapps.com, который предлагает бесплатный хостинг для разработки.
Для тестирования.
Чтобы обойти аутентификацию локально, я использую пакет dotenv npm для установки переменных среды. мой файл .env выглядит следующим образом:
NODE_ENV='test'
Теперь я могу реализовать свое собственное промежуточное ПО, вы могли заметить строку:
const testconfig = require('./config/testconfig');
, которую я использую, вот код для этот testconfig. js:
module.exports = function () {
return function (req, res, next) {
// Implement the middleware function based on the options object
if(process.env.NODE_ENV === 'test'){
req.user = {
id: 'testuser',
battletag:'testbattletag'
}
}
next()
}
}
Я заставляю приложение использовать его, вызывая:
app.use(testconfig());
И, наконец, я редактирую метод sureAuthenticated следующим образом:
module.exports = {
ensureAuthenticated: function(req, res, next) {
if(process.env.NODE_ENV === 'test'){
return next();
}
if (req.isAuthenticated()) {
return next();
}
req.flash('error_msg', 'Please log in to view this resource');
res.redirect('/');
}
}
Все настроено и готово к go! Теперь я могу спокойно использовать nodemon, чтобы мгновенно увидеть изменения при разработке маршрутов, пока они еще готовы к производству. Все, что мне нужно сделать, это установить для переменной среды что-то вроде «production» в моем файле .env, например так:
NODE_ENV='production'