// module.exports = function ensureLoggedIn(req, res, next) { // if (req.isAuthenticated()) { return next(null); } // res.redirect('/login'); // }; const util = require('util'); var app = require('express')(); var db = require('./db'); var config = require('./setup_const'); var passport = require('passport'); var Strategy = require('passport-local').Strategy; var CookieStrategy = require('passport-cookie').Strategy; var session = require('express-session'); const cookierParser = require('cookie-parser'); var ensureLoggedIn = require("connect-ensure-login").ensureLoggedIn("/login"); module.exports = { ensureLoggedIn_Orig: ensureLoggedIn, ensureLoggedIn_P: function (req, res, next){passport.authenticate('local', { successRedirect: '/accontrol', failureRedirect: '/login' })}, passport: passport, ensureLoggedIn_New: function (req, res, next) { if (req.isAuthenticated()) { console.log("auth OK"); return next(null); } console.log("auth redirect"); res.redirect('/login'); }, ensureLoggedIn: function (options) { if (typeof options == 'string') { options = { redirectTo: options } } options = options || {}; var url = options.redirectTo || '/login'; var setReturnTo = (options.setReturnTo === undefined) ? true : options.setReturnTo; return function(req, res, next) { console.log("auth:" + req.isAuthenticated); if (!req.isAuthenticated || !req.isAuthenticated()) { if (setReturnTo && req.session) { req.session.returnTo = req.originalUrl || req.url; } return res.redirect(url); } next(); } }, init: function () { //! Configure the local strategy for use by Passport. // // The local strategy require a `verify` function which receives the credentials // (`username` and `password`) submitted by the user. The function must verify // that the password is correct and then invoke `cb` with a user object, which // will be set at `req.user` in route handlers after authentication. passport.use(new Strategy( function(username, password, cb) { console.log('requesting authentication for user '+ username); db.users.findByUsername(username, function(err, user) { if (err) {console.log('err:'+ util.inspect(err)); return cb(err); } if (!user) { console.log('user is null:'); return cb(null, false); } if (user.password != password) { console.log('wrong pass '); return cb(null, false); } console.log('authenticated!'); return cb(null, user); }); })); // passport.use(new CookieStrategy( // function(token, done) { // User.findByToken({ token: token }, function(err, user) { // if (err) { return done(err); } // if (!user) { return done(null, false); } // return done(null, user); // }); // } // )); // Configure Passport authenticated session persistence. // // In order to restore authentication state across HTTP requests, Passport needs // to serialize users into and deserialize users out of the session. The // typical implementation of this is as simple as supplying the user ID when // serializing, and querying the user record by ID from the database when // deserializing. passport.serializeUser(function(user, cb) { console.log("serializeUser:"+ util.inspect(user) ); cb(null, user.id); }); passport.deserializeUser(function(id, cb) { console.log("deserializeUser:"+ id ); db.users.findById(id, function (err, user) { if (err) { return cb(err); } cb(null, user); }); }); app.use(session({ key: 'user_sid', secret: 'че_първият_ще генерира-грешка', resave: true, saveUninitialized: false, cookie: { expires: 600000 }, })); app.use(cookierParser('abcdef-12345')) app.use(passport.initialize()); app.use(passport.session()); app.get('/login', function(req, res) { res.render('login', { user: req.user }); }); app.post('/login', passport.authenticate('local', { successRedirect: '/accontrol', failureRedirect: '/login' }), // authenticated user. function(req, res) { console.log("logged in. session:" + req.session); res.redirect(req.session); } ); app.get('/logout', function(req, res){ req.logout(); res.redirect( '/login'); }); return app; } };