我一直在尝试了解如何使会话与node.js一起使用,以使用户在注册后得到身份验证。 (最终将需要对现有用户进行记录。)但是,会话数据似乎并没有保留在用户(我的本地主机)中。
所以我一直在阅读几页,试图了解
express
express-session
socket-io
cookie-parser (not required??)
body-parser (also not required as I am getting data from client via socket-io?)
passportjs (read up on this but im not sure if this is the right way forward?)
在系统中可以共同验证用户的价值。我以为我有,但是
req.session.whatever
没有从一页转移到另一页。
我的要求
var express = require('express');
var app = express();
var serv = require('http').Server(app);
var credential = require('credential');
var session = require('express-session');
var bodyParser = require("body-parser");
var cookieParser = require('cookie-parser');
var RPSQL = require('./mysql-all.js'); // Contains all the scripts for MYSQL
任何.use,.get .post来配置express。
app.use(cookieParser());
app.use(session({
secret : 'abcdefghijklmnopqrstuvwxyz'
}));
app.get('/client/RPGamePage.html', function(req,res){
console.log("On Game Page");
console.log(req.session)
if(req.session.loggedin){
console.log("Logged in");
} else {
res.redirect('/client/RPLoginPage.html');
}
});
app.post('/authenticate',function(req,res){
console.log("AUTENTICATE");
req.session.loggedin = true;
res.redirect('/client/RPGamePage.html');
console.log(req.session)
});
app.get('/', function(req, res) {
// res.sendFile(__dirname + '/client/RPHomePage.html');
res.redirect('/client/RPHomePage.html');
// res.redirect('/client/phpmyAdmin/index.php');
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use('/client',express.static(__dirname + '/client'));
serv.listen(80);
console.log("Server started.");
Socket.io代码
var io = require('socket.io')(serv, {});
io.on('connection', function(socket) {
// On Connection set up the listeners
console.log("User: " + socket.id + " Connected!")
socket.on('disconnect', function() {
console.log("User: " + socket.id + " Disconnected!")
});
socket.on('sendSignup',function(data){
// Need To Check if the username exisists in database
RPSQL.mysql_UserExsist(data.username)
.then(res => res)
.then(res => {
RPSQL.mysql_addUser(data.username,data.password)
})
.then(res =>{
socket.emit('sendSignup',"true")
})
.catch(function(err){
console.log(err);
})
});
});
客户端代码。
var socket = io();
$(function(){
$("#SignupBtn").click(function(e){
//User input validations before sending data.
if($("#username").val() && $("#password").val()){
console.log("Signed up");
e.preventDefault(); // prevents page reloading
data = {
username: $("#username").val(),
password: $("#password").val()
}
socket.emit('sendSignup',data);
return false;
}else {
console.log("Please enter all data");
}
});
socket.on('sendSignup',function(data){
console.log(data);
if(data === "true"){
$.post("/authenticate", function(data){
console.log(data);
});
} else if (data === "false") {
//Error
} else {
//Error
}
})
})
问题是当我获得/ authenticate触发并设置
时req.session.loggedin = true
然后我重定向或转到/client/RPGamePage.html
req.session.loggedin
不存在,该用户被重定向回/client/RPUserPage.html
真的要买这个,要想弄清楚这个呢。