I am trying to manage session in Nodejs like if user is already logged in, will be taken directly to welcome page. I have used a separate Router module in which I am trying to access request parameters to manage sessions. I have searched and used
req.params
req.body
req.query
to access uname parameter in my html file. All I am getting is undefined
I have also tried the URL module but no luck. Please try to be thorough as I am beginner in Nodejs.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
<link rel="stylesheet" href="../CSS/style.css">
</head>
<script type="text/javascript">
function validate(){
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
if ( username == "[email protected]" && password == "admin123"){
return false;
}
else {
alert ("Login Failed");
}
}
</script>
<body>
<div class="container">
<div id="login-form">
<h3>Login</h3>
<fieldset>
<form >
<input type="email" id="username" name="uname">
<input type="password" id="password" >
<a href ="/welcome"> Welcome </a>
<input type="submit" value="Login" onclick="return (validate())" />
<footer class="clearfix">
<p><span class="info">?</span><a href="#">Forgot Password</a></p>
</footer>
</form>
</fieldset>
</div> <!-- end login-form -->
</div>
</body>
</html>
app.js
var express = require('express'),
app = express();
path = require('path')
cookieParser = require('cookie-parser')
session = require('express-session')
config = require('./config/config.js');
connectMongo = require('connect-mongo')(session)
mongoose = require('mongoose').connect(config.dbURL)
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('hogan-express'));
app.set('view engine', 'html');
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());
var env = process.env.NODE_ENV || 'development';
if(env==='development'){
app.use(session({secret:config.sessionSecret, saveUninitialized:true, resave:true}));
} else {
app.use(session({
secret:config.sessionSecret,
store: new connectMongo({
//url:config.dbURL,
mongooseConnection:mongoose.connections[0],
stringify:true
}),
saveUninitialized:true,
resave:true
}))
}
/*
app.route('/').get(function(req, res, next){
//res.send('<h1>Hello World!</h1>');
res.render('login', {title:'Welcome to AIOCloud'});
})
OR
require('./routes/routes.js')(express, app, session);
*/
var userSchema = mongoose.Schema({
username:String,
password:String,
fullname:String
})
var person = mongoose.model('aiocloud', userSchema);
var john = new person({
username:'johndoe',
password:'john_wants_to_login',
fullname:'John Doe'
})
john.save(function(err){
console.log('Done !');
});
require('./routes/routes.js')(express, app);
app.listen(3000, function(){
console.log('AIOCloud Working on Port 3000');
console.log('Mode: ' + env);
})
routes.js
module.exports = function(express, app){
var router = express.Router();
var bodyParser = require('body-parser')
var ses;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
router.get('/', function(req, res, next){
res.render('login.html');
});
router.get('/login', function(req, res, next){
ses = req.session;
if(ses.uname)
res.redirect('/welcome');
else{
ses.uname = req.params.uname;
console.log(ses.uname);
res.redirect('/welcome');
}
});
router.get('/welcome', function(req, res, next){
if(ses.uname){
//console.log(ses.id);
res.render('welcome', {title:'Welcome'});
}
else
res.render('login.html');
});
router.get('/setcolor', function(req, res, next){
req.session.favColor = "Red";
res.send('Setting favourite color!');
});
router.get('/getcolor', function(req, res, next){
res.send('Favourite color is ' + (req.session.favColor===undefined?"Not Found":req.session.favColor))
});
app.use('/', router);
}
ses.uname is undefined because you don't send any data from the page.
When you try to set ses.uname like this:
ses.uname = req.params.uname;
you miss that you must do some request like post request from html page to node.js server and in this post you must pass a parameter (uname) with some data:
$.post("/login",{uname: username},function(data){
// do some stuff when post is completed
});
then your req.params.uname variable is setted and then session parameter uname is setted.
Try this and good luck!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With