gpt4 book ai didi

node.js - 移动应用程序中的套接字身份验证

转载 作者:IT王子 更新时间:2023-10-29 06:07:48 24 4
gpt4 key购买 nike

我想知道如何使用套接字和 cordova 正确验证用户。

目前,发生了以下情况:

  1. 用户使用普通的 ajax 命令注册或登录,发送 emailpassword
  2. 我发回一个访问 token 和他们的电子邮件,它们存储在手机上的 localstorage 中,并作为 email => accesstoken 在 redis 中
  3. 然后用户向 socket.io 服务器发送连接请求,类似于(客户端):

var socket = io('http://192.168.50.3:8080/');
socket.on('connect', function(){
socket.emit('init', { email: 'email@email.com', token: '12ueno1' });
});
  1. 然后我在后端检查该访问 token 和电子邮件是否在我的 Redis 服务器中,如果是,我开始监听客户端发送的任何命令,就像这样(服务器端):

var io = require('socket.io').listen(8080),
mongoose = require('mongoose'),
schema = mongoose.Schema,
userModel = require('./models/user'),
lobbyModel = require('./models/lobby'),
redis = require('redis').createClient();

io.sockets.on('connection', function(socket){
socket.on('init', function(data){
// here, we check for an init command which will have an email and access token
// if it's there, we put the user into a room and let them wait for data
redis.get(data.email, function(err, reply){
if(reply === data.token){

// get into room
var roomKey = data.email;
socket.join(roomKey);

// get user
var user;
userModel.findOne({ email: data.email }, function(err, doc){
user = doc;
});

socket.in(roomKey).on('create_lobby', function(data){
// do stuff for creating a lobby and then send back the data
io.sockets.in(roomKey).emit('created_lobby', {
email: user.email
});
});
}
});
});
});
  1. 现在通过身份验证,用户可以发送命令,例如(客户端):

socket.on('create_lobby', { name: 'test' });

现在,这工作正常,我只是想知道我是否以正确的方式进行,或者我是否正在创建一个不安全的系统。

最佳答案

相当晚了,但我才刚刚遇到这个问题。

答案是该方法不安全。

首先, token 未经过验证。

其次,没有超时检查。

关于node.js - 移动应用程序中的套接字身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com