如何使socket.io处理快速会话?

时间:2019-07-24 20:42:35

标签: javascript node.js sockets session socket.io

我一直在尝试了解如何使会话与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

真的要买这个,要想弄清楚这个呢。

0 个答案:

没有答案