我是NodeJs的新手,我试图找到一种方法来定义socket.io事件上的快速会话变量,但不知道是否可能。
想做这两个动作,但在socket.io事件中
req.session.user = data.login;
res.redirect('/');
我的目的是:当用户成功登录时,要重定向他并添加一个名为' user'的会话变量。为了到达主页面。
app.get('/', function(req,res){
if (req.session.user) {
res.render('accueil.html',{});
} else {
res.redirect('/connection');
}
});
这是我的客户端代码:
var express = require('express');
var swig = require('swig');
var ent = require('ent');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var session = require('express-session');
var app = express();
var server = app.listen(3000);
var io = require('socket.io').listen(server);
// Environnement
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/public", express.static(__dirname + "/public"));
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.set('view cache', false);
swig.setDefaults({ cache: false });
app.use(session({
secret: 'poussixthetruefighteroftheparadise',
saveUninitialized: true,
resave: true
}));
//MongoDB
var db = mongoose.connect('mongodb://127.0.0.1:27017/maBase');
var userSchema = new mongoose.Schema({
username: String,
mail: String,
password: String,
friends: [],
friends_demand: [],
default_sound: String
});
var user = db.model('user', userSchema);
// Page Principale
app.get('/', function(req,res){
if (req.session.user) {
res.render('accueil.html',{});
} else {
res.redirect('/connection');
}
});
// Page connection
app.get('/connection', function(req,res){
res.render('index.html',{});
});
io.on('connection', function(socket){
socket.on('sub_data', function(data){
if (data.pass1.length > 6) {
if (data.pass1 == data.pass2) {
user.find({$or: [{username: data.username}, {mail: data.email}]}).limit(1).exec(function(err,users){
if (!users.length) {
var values = new user({
username: ent.encode(data.username),
mail: ent.encode(data.email),
password: ent.encode(data.pass1)
});
values.save(function(){socket.emit('sub_instruction',{message: "k"});});
} else {
if (users[0].mail == data.email) {
socket.emit('sub_instruction', {message: "Cette adresse mail a déja été utilisé."});
} else { socket.emit('sub_instruction', {message: "Ce nom d'utilisateur existe déja."});}
}
});
} else {socket.emit('sub_instruction', {message: "Les mots de passes doivent être identiques."});}
} else {socket.emit('sub_instruction', {message: "Le mot de passe doit contenir au minimum 7 caractères."});}
});
socket.on('con_data', function(data){
user.find({$or: [{username: data.login, password: data.pass},{mail: data.login, password: data.pass}]}).limit(1).exec(function(err, users){
if (!users.length) {
socket.emit('con_instruction', {message: "Login ou mot de passe incorrect."});
}
else {
req.session.user = data.login;
res.redirect('/');
}
});
});
});
答案 0 :(得分:0)
您需要passport和passport.socketio。
使用护照,您可以req.user
通过passport.js自动使用会话添加和管理
使用passport.socketio,您可以在套接字处理程序中使用相同的req.user
(作为socket.request.user
)。