2015-09-05 6 views
0

Comment puis-je transmettre le jeton de connexion personnalisée à la connexion io? Donc, fondamentalement, après avoir authentifié un utilisateur, et l'utilisateur aura le jeton, mais comment puis-je passer ce jeton à la connexion socket.io et probablement l'utiliser.comment passer le jeton de connexion de l'utilisateur à socket.io?

est ici le code - c'est api.js

function ensureAuthenticated(req, res, next) { 
    // I skip alot of codes for clarity 
    var token = req.body.token || req.query.token || req.headers['x-access-token']; 

    if (token) { 
     req.user = user; 
     return next(); 
    } 
} 
//Login 
router.post('/login', function(req, res) { 
     // I skip the mongoose part for clarity 
     var token = createToken(user); 

     res.json({ 
      success: true, 
      message: "Successfully login", 
      token: token 
     }); 
}); 

alors que c'est server.js

io.on('connection', function(socket) { 

    socket.broadcast.emit('user joined', { 
    username: socket.username, 
    numUsers: numUsers 
    }); 

    socket.on('typing', function() { 
    socket.broadcast.emit('typing', { 
     username: socket.username 
    }); 
    }); 

socket.on('online', function() { 
    socket.emit('online'); 
    }); 

    socket.on('chat', function(msg) { 
    console.log("message: " + msg); 
    io.emit('chat', msg); 
    }); 

}); 

Comme vous pouvez le voir si je dois définir l'objet nom d'utilisateur i ai faire username: socket.username, pour utiliser l'objet nom d'utilisateur.

Si je fais le nom d'utilisateur: req.user, il retournera l'erreur. Dois-je configurer la fonction ensureAuthenticated dans le io.on('connection') pour pouvoir l'utiliser?

Répondre

0

Sur tout message socket entrant, vous pouvez accéder aux cookies qui étaient présents lorsque la prise a été connecté via:

socket.request.headers.cookie 

Donc, si votre jeton de connexion de l'utilisateur est dans un cookie, vous pouvez chercher dans là pour toute socket socket.io connecté.


Vous pouvez également effectuer une authentification de prise au moment de la connexion à l'aide socket.io middleware comme indiqué ici: Authentication with Node/Express/Socket.IO

exemple de code dans la socket.io doc here.

var io = require('socket.io')(); 
io.use(function(socket, next){ 
    if (socket.request.headers.cookie) return next(); 
    next(new Error('Authentication error')); 
});