Click here to Skip to main content
15,888,351 members
Home / Discussions / JavaScript
   

JavaScript

 
QuestionNewbie: how do I analyse DOM Objects? Pin
enginestar5-Apr-18 3:05
enginestar5-Apr-18 3:05 
AnswerRe: Newbie: how do I analyse DOM Objects? Pin
Richard MacCutchan5-Apr-18 4:34
mveRichard MacCutchan5-Apr-18 4:34 
GeneralRe: Newbie: how do I analyse DOM Objects? Pin
enginestar5-Apr-18 4:50
enginestar5-Apr-18 4:50 
GeneralRe: Newbie: how do I analyse DOM Objects? Pin
Richard MacCutchan5-Apr-18 6:10
mveRichard MacCutchan5-Apr-18 6:10 
GeneralRe: Newbie: how do I analyse DOM Objects? Pin
enginestar5-Apr-18 6:57
enginestar5-Apr-18 6:57 
GeneralRe: Newbie: how do I analyse DOM Objects? Pin
Richard MacCutchan5-Apr-18 7:00
mveRichard MacCutchan5-Apr-18 7:00 
GeneralRe: Newbie: how do I analyse DOM Objects? Pin
Christian75739-Apr-18 15:51
Christian75739-Apr-18 15:51 
QuestionisAuthenticated() always returns false irrespective whether user is logged in or not Pin
Member 137573661-Apr-18 22:55
Member 137573661-Apr-18 22:55 
The req.isAuthenticated() of api.js function always returns false whether or not the user is logged in or not. Thus user is redirected to /#login at all times. I have not yet connected to MongoDB so it's just the javascript and nodejs part. I am testing my code on advanced rest client.

I tried a few solutions which suggested using cookies but it doesn't seem to work. I know there already exists a lot of answers to this question and I have tried nearly most of the answers on stack overflow but somehow nothing seems to work. I don't know what I am missing out on. I am stuck on this for a long time ao any kind of help is highly appreciated.

app.js (main file):

JavaScript
var http_errors = require('http-errors');
   var express = require('express');
   var path = require('path');
   var favicon = require('serve-favicon');
   var logger = require('morgan');
   var passport = require('passport');
   var session = require('express-session');
   var cookieParser = require('cookie-parser');
   var bodyParser = require('body-parser');

   var api = require('./routes/api');
   var authenticate = require('./routes/authenticate')(passport);

   var app = express();

   app.use(cookieParser('super duper secret'));
   app.use(session({
       secret: 'super duper secret',
       resave: true,
       saveUninitialized: true
   }));
   app.use(logger('dev'));
   app.use(bodyParser.json());
   app.use(bodyParser.urlencoded({ extended: false }));
   app.use(express.static(path.join(__dirname, 'public')));
   app.use(passport.initialize());
   app.use(passport.session());

   // view engine setup
   app.set('views', path.join(__dirname, 'views'));
   app.set('view engine', 'ejs');

   app.use('/api', api);
   app.use('/auth', authenticate);

   //Initialize passport
   var initPassport = require('./passport-init');
   initPassport(passport);

   module.exports = app;

Routing files:-

api.js:
JavaScript
var express = require('express');
    var router = express.Router();
    
    router.use(function(req, res, next){
        
        if(req.method === "GET"){
            //continue to the next middleware or request handler
            return next();
        }
        
        if (!req.isAuthenticated()){
            //user not authenticated, redirect to login page
            return res.redirect('/#login');
        }
        
        //user authenticated continue to next middleware or handler
        return next();
    });
    
    //api for all posts
    router.route('/posts')
    
        //returns all posts
        .get(function(req, res){
        
            //temporary solution
            res.send({message: 'TODO return all posts'});
        })
    
        //posts all posts
        .post(function(req, res){
        
            //temporary solution
            res.send({message: 'TODO create a new post'});
        })
    
    module.exports = router;

authenticate.js:
JavaScript
var express = require('express');
    var router = express.Router();
    
    module.exports = function(passport){
    
    	//sends successful login state back to angular
    	router.get('/success', function(req, res){
    		res.send({state: 'success', user: req.user ? req.user : null});
    	})
    
    	//sends failure login state back to angular
    	router.get('/failure', function(req, res){
    		res.send({state: 'failure', user: null, message: "Invalid username or password"});
    	})
    
    	//log in
    	router.post('/login', passport.authenticate('login', {
    		successRedirect: '/auth/success',
    		failureRedirect: '/auth/failure'
    	}))
    
    	//sign up
    	router.post('/signup', passport.authenticate('signup', {
    		successRedirect: '/auth/success',
    		failureRedirect: '/auth/failure'
    	}))
    
    	//log out
    	router.get('/signout', function(req, res) {
    		req.logout();
    		res.redirect('/');
    	});
    
    	return router;
    }

passport-init.js (file that exploits passport module):
JavaScript
var LocalStrategy   = require('passport-local').Strategy;
    var bCrypt = require('bcrypt-nodejs');
    //temporary data store
    var users = {};
    module.exports = function(passport){
    
    	// Passport needs to be able to serialize and deserialize users to support persistent login sessions
    	passport.serializeUser(function(user, done) {
            
            //tell passport which id to use for user
    		console.log('serializing user:',user.username)
    		return done(null, user.username);
    	})
    
    	passport.deserializeUser(function(username, done) {
            User.findById(username, function(err, user){
    		return done(err,users[username]);
            })
    	})
    
    	passport.use('login', new LocalStrategy({
    			passReqToCallback : true
    		},
    		function(req, username, password, done) { 
    
                if(!users[username]){
                    return done('user not found',false);
                }
            
                if(!isValidPassword (users[username],password)){
                    return done('invalid password', false);
                }
            
                console.log('sucessfully logged in')
    			return done(null, users[username]);
    		}
    	))
    
    	passport.use('signup', new LocalStrategy({
    			passReqToCallback : true // allows us to pass back the entire request to the callback
    		},
    		function(req, username, password, done) {
            
                if(users[username]){
                    return done('username already taken', false);
                }
                
                users[username] = {
    				username: username,
    				password: createHash(password)
    			}
            
                console.log('sucessfully signed in')
                console.log(users[username])
    			return done(null, users[username]);
    		}
    	))
    
        var isValidPassword = function(user, password){
    		return bCrypt.compareSync(password, user.password);
    	}
        
    	var createHash = function(password){
    		return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null);
    	}
    };

QuestionHow do i create an apps using android studio? Pin
Siti nasuha28-Mar-18 16:12
Siti nasuha28-Mar-18 16:12 
QuestionSetting a variable to a string..Do.. While loop Pin
esljustin26-Mar-18 14:15
esljustin26-Mar-18 14:15 
AnswerRe: Setting a variable to a string..Do.. While loop Pin
Richard MacCutchan26-Mar-18 22:15
mveRichard MacCutchan26-Mar-18 22:15 
AnswerRe: Setting a variable to a string..Do.. While loop Pin
Weavr8-Apr-18 0:39
Weavr8-Apr-18 0:39 
Questionany shortcut to toggle in and out the jquery code Pin
indian14323-Mar-18 8:43
indian14323-Mar-18 8:43 
QuestionText to Image Font Size Pin
Member 1374210822-Mar-18 17:51
Member 1374210822-Mar-18 17:51 
AnswerRe: Text to Image Font Size Pin
Richard Deeming23-Mar-18 2:46
mveRichard Deeming23-Mar-18 2:46 
QuestionHow to fetch unchecked checkbox value Pin
Member 1372997516-Mar-18 1:25
Member 1372997516-Mar-18 1:25 
AnswerRe: How to fetch unchecked checkbox value Pin
Richard Deeming16-Mar-18 2:50
mveRichard Deeming16-Mar-18 2:50 
AnswerRe: How to fetch unchecked checkbox value Pin
F-ES Sitecore22-Mar-18 6:58
professionalF-ES Sitecore22-Mar-18 6:58 
PraiseRe: How to fetch unchecked checkbox value Pin
Richard Deeming22-Mar-18 9:14
mveRichard Deeming22-Mar-18 9:14 
GeneralRe: How to fetch unchecked checkbox value Pin
F-ES Sitecore22-Mar-18 23:15
professionalF-ES Sitecore22-Mar-18 23:15 
QuestiontoggleClass and hasClass Pin
VK1915-Mar-18 4:31
VK1915-Mar-18 4:31 
AnswerRe: toggleClass and hasClass Pin
Richard Deeming15-Mar-18 6:35
mveRichard Deeming15-Mar-18 6:35 
GeneralRe: toggleClass and hasClass Pin
VK1915-Mar-18 7:56
VK1915-Mar-18 7:56 
GeneralRe: toggleClass and hasClass Pin
Richard Deeming15-Mar-18 8:03
mveRichard Deeming15-Mar-18 8:03 
GeneralRe: toggleClass and hasClass Pin
VK1915-Mar-18 8:42
VK1915-Mar-18 8:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.