Login : Socket.io + Mysql

Par Nikola, il y a 11 ans


Javascript NodeJS

Salut,

J'ai une application qui consiste à connecter un membre à son socket et de mettre l'utilisateur dans un tableau des connectés.
Le problème c'est que je n'y arrive pas.

J'utilise mysql pour retrouver le membre qui se connecte, et avoir toutes ses infos (nom et prénom).

Voici mon code server.js :

var https = require('https'); var mysql = require('mysql'); var sha1 = require('sha1'); var app = require('express')(); var fs = require('fs'); var options = {key: fs.readFileSync('../../etc/apache2/ssl/key.key'),cert: fs.readFileSync('../../etc/apache2/ssl/cert.crt')}; var server = https.createServer(options).listen(1812); var i; var connection = mysql.createConnection({ host: '****', user: '****', password: '****', database: '****' }); var io = require('socket.io').listen(server); var users = []; io.sockets.on('connection', function(socket){ var me; for(i = 0; i < users.length; i++) { socket.emit('newusr', users[i]); } socket.on('login', function(user, callback){ connection.query('SELECT * FROM users INNER JOIN users_infos ON users.id = users_infos.id WHERE email = ? AND mdp = ?',[user.email,sha1(user.mdp)],function(error, rows, fields){ if(error){ console.log(error); return; } if(rows.length == 1){ var userIndex = -1; me = rows[0]; for (i = 0; i < users.length; i++) { if (users[i].email === me.email) { userIndex = i; } } if(me !== undefined && userIndex === -1){ users.push(me); io.sockets.emit('newusr', me); callback(true); } else { callback(false); } } }); }); socket.on('disconnect', function(){ }); });

Les noms et prénoms des membres connectés s'affichent bien, mais quand ils se déconnectent ou quitte le navigateur, il ne se déconnecte pas.
J'ai rien mis dans la fonction "disconnect" parce que je ne sais pas quoi mettre

Merci d'avance pour votre aide.

7 réponses

Huggy, il y a 11 ans

Je pense qu'il faut identifier la connection par le socket. Il faut gérer un tableau associatif qui fait le lien en l'email et le socket.
A la connection tu inscris le user et le socket qui va avec, Au disconnect tu recherches l'email par le socket.
Est-ce clair ?

Nikola, il y a 11 ans

Pas trop, serait-il possible d'avoir un code ?
Merci

Huggy, il y a 11 ans

Je reviens sur ce j'ai dit, cette méthode est celle que j'emploie avec Play! mais pour socket.io il semblerait que ce soit plus facile puis qu'il suffit de rajouter un attribut à l'objet socket (par exemple email), l'attribut sera géré comme une variable de session.
Au login : socket.email = me.email
Au disconnect il suffit de supprimer du tableau users l'élément qui a l'email socket.email
A tester !!!

Nikola, il y a 11 ans

J'ai fais un "console.log" à la déconnexion et dès qu'une connexion se fait, la déconnexion se fait directement.
Je pensais qu'elle se ferais à la fermeture de l'onglet ou de la fenêtre ?

Nikola, il y a 11 ans

Ce tuto, je l'ai vu pleins de fois ^^

Smartee, il y a 11 ans

De même, je me la passait en boucle quand je me formais, si vous avez d'autres ressources videos dans la meme veine, l'etudiante a même crée une video pour scrapper le web, mais je ne l'ai pas encore vu, bon , j'arrete, c'est hors sujet.