Files
iot/src/auth.js
Dobromir Popov 643c6c6b5f removed relative path;
MQTT port & toppic fixed;
2021-05-01 01:54:51 +03:00

142 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;
}
};