2015-08-04 2 views
0

Я пытаюсь изучить node.js недавно. Я просто настраиваю проект Phonegap и req.session не определен. Вот мой код: app.jsNode.js Express.js Mongoose: Не сохранять сеанс

var express = require('express'), 
routes = require('./routes'), 
data = require('./routes/data'), 
login = require('./routes/login'), 
asignatura = require('./routes/login'), 
http = require('http'), 
cookieParser = require('cookie-parser'), 
path = require('path'), 
session = require('express-session'); 

var app = express(); 

app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(cookieParser()); 
app.use(express.urlencoded()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.cookieParser()); 
app.use(session({cookieName: 'session', 
        secret: "secret", 
        resave: true, 
       saveUninitialized: true})); 
if ('development' == app.get('env')) { 
app.use(express.errorHandler()); 
} 
app.get('/', routes.index); 
app.post('/signIn', login.signIn); 
http.createServer(app).listen(app.get('port'), function(){ 
console.log('Express server listening on port ' + app.get('port')); 
}); 

Это моя модель базы данных и функции. login.js

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 
var loginSchema = mongoose.Schema({ 
_id:String, 
pass:String, 
tipo:String 
}); 
loginSchema.methods.generateHash = function(pass) { 
return bcrypt.hashSync(pass, bcrypt.genSaltSync(8), null); 
}; 

loginSchema.methods.verifyPassword = function(pass) { 
return bcrypt.compareSync(pass, this.login.pass); 
}; 

    var login = mongoose.model('login', loginSchema); 

exports.signIn = function(req, res){ 
var dniNum = req.body.dniNum; 
var password = req.body.password; 

login.find({_id: dniNum, pass: password}, function(err, data){ 
    res.send({err: err, data: data}); 
    console.log(data); 
    console.log(err); 
    console.log(req.session); 
    var user = req.session.data; 
}); 

Index.ejs

<body> 
<div class="ui-header ui-bar-inherit" data-role="header"> 
    <h1 class="ui-title">Login</h1> 
</div> 
    <div data-role="content" class="ui-content"> 
    <div> 
    <h5>Cédula:<input type="text" name="dni" id="inputdniNum" placeholder="Cedula"/></h5> 

    </div> 
    <div> 
     <h5>Contraseña</h5> 
     <input type="password" id="inputPassword" placeholder="Password"/> 
    </div> 
     <br> 
    <label id="errMsg" class="control-label"></label> 

    <br> 
    <div> 
     <button id="signIn" type="submit" >Ingresar</button> 

    </div> 
     </div> 
</body> 

SignIn.js

$(document).ready(function(){ 
     $("#signIn").click(function(){ 
     var dniNum = $("#inputdniNum").val(); 
     var password = $("#inputPassword").val(); 

    if(dniNum == '' || password == ''){ 
     $("#form").addClass('has-error'); 
     $('#errMsg').html('El dni o la contraseña no puede estar vacia') 
    } 
    else { 

     var data = { 
      dniNum: dniNum, 
      password: password 
     }; 
     $.ajax({ 
      type: "post", 
      url: "/signIn", 
      data: data 
     }).success(function (data, textstatus){ 
      if(data.data == 0){ 

      // if(data.dniNum !== dniNum && data.pass !== password){ 
       $("#form").addClass('has-error'); 
       $('#errMsg').html('El dni o la contraseña es incorrecta'); 
      } 
      else { 
       sessionStorage.setItem('signedInUser', JSON.stringify(data.data)); 
        sessionStorage.getItem('signedInUser'); 
        window.location.assign("/alumno_principal"); 

      } 
     }).error(function (err, textStatus){ 
      alert(err + textStatus); 
     }) 
    } 
}) 

}); 

Это проявляется в моей консоли как ошибка и req.session не определен

POST /signIn 200 68.854 ms - 120 
    [ { _id: '11111', pass: '12345', tipo: 'estudiante' } ] 
    null 
    undefined 

    /home/diego/Tesis/App/routes/login.js:86 
    var user = req.session.data; 
         ^
    TypeError: Cannot read property 'data' of undefined 
    at /home/diego/Tesis/App/routes/login.js:86:31 
    at process._tickCallback (node.js:448:13) 

ответ

0

паспорт JS является лучшим вариантом для обработки сеанса с узлом. Приложение js express.js.

Полная документация и конфигурация доступна здесь примеры образцов -

https://github.com/jaredhanson/passport

+0

Да его отлично работает. благодаря –

2

Вы можете использовать модуль паспорта и который будет заботиться о процессе

var passport = require('passport'); 

app.use(passport.initialize());  // Initialize PassportJS 
app.use(passport.session());  

аутентификации Определение локальной стратегии local_strategy.js

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var models = require('models'); 

function PassportLocalStrategy() { 

    LocalStrategy.call(this, { usernameField: 'email' },  this.verifyUser.bind(this)); 

    passport.serializeUser(function(user, done) { 
    done(null, user.id);  
    passport.deserializeUser(this.get.bind(this));  
} 

PassportLocalStrategy.prototype.get = function(id, done) { 
    models.User.find({ where: { id: id } }).then(function(user){ done(null,  user.dataValues) }); 
}; 

PassportLocalStrategy.prototype.verifyUser = function(email, password, done) { 
models.User.find({ where: { email: email } }).then(function(user){ user; 
    done(null, user.dataValues); 
}) 
}; 

module.exports = PassportLocalStrategy; 
Смежные вопросы