建立套接字后进行socket.io身份验证

建立套接字后进行socket.io身份验证,第1张

建立套接字后进行socket.io身份验证

这实际上并不难,但是您正以错误的方式进行处理。几件事:

  1. 您不能使用socket.io 设置 cookie;但是,您可以随时获取任何已连接客户端的cookie值。为了设置cookie,您将必须发送一个新的http响应,这意味着用户必须先发送一个新的http请求(又名刷新或转到新页面,这听起来对您而言不可能)。

  2. 是的:socket.io是安全的(只要可以传输任何数据即可)。

因此,您可以执行以下 *** 作:

在用户的初始连接上,创建具有唯一会话ID的cookie,例如从Express的会话中间件生成的cookie。但是,您将需要配置它们,使其在会话结束时不过期(否则,它们将在关闭浏览器后立即过期)。

接下来,您应该创建一个对象来存储cookie会话ID。每次设置新的connect.sid
cookie时,都将其默认值存储在新对象中(这意味着该用户已通过会话而非登录进行了身份验证)

在用户的登录名上,向服务器发送套接字发出消息,然后您可以在其中验证登录凭据,然后更新您创建的会话ID对象,以使当前套接字ID读为true(登录)。

现在,当接收到新的http请求时,读取cookie.sid,并检查其在对象中的值是否为true。

它看起来应该如下所示:

var express = require('express'),http = require('http'),cookie = require('cookie');var app = express();var server = http.createServer(app);var io = require('socket.io').listen(server);app.use(express.cookieParser());app.use(express.session({     secret: 'secret_pw',    store: sessionStore,    cookie: {         secure: true,        expires: new Date(Date.now() + 60 * 1000), //setting cookie to not expire on session end        maxAge: 60 * 1000,        key: 'connect.sid'    }}));var sessionobj = {}; //This is important; it will contain your connect.sid IDs.//io.set('authorization'...etc. here to authorize socket connection and ensure legitimacyapp.get("/*", function(req, res, next){    if(sessionobj[req.cookies['connect.sid']]){        if(sessionobj[req.cookies['connect.sid']].login == true){ //Authenticated AND Logged in        }        else{ //authenticated but not logged in        }    }    else{        //not authenticated    }});io.sockets.on('connection', function(socket){    sessionobj[cookie.parse(socket.handshake.headers.cookie)['connect.sid'].login = false;    sessionobj[cookie.parse(socket.handshake.headers.cookie)['connect.sid'].socketid = socket.id;    socket.on('login', function(data){        //DB Call, where you authenticate login        //on callback (if login is successful):        sessionobj[cookie.parse(socket.handshake.headers.cookie)['connect.sid']] = true;    });    socket.on('disconnect', function(data){        //any cleanup actions you may want    });});


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4903726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存