2014-07-24 6 views
-1

이 주제에 관해 많은 질문이 있었지만 아무도 내 문제를 해결할 수 없었습니다. 제가 익스프레스 앱을 개발했으며 인증 방법은 세션 객체에 쓰고 redis-store를 사용하는 것이 었습니다. 그것은 개발하는 동안 완벽하게 작동했습니다.request.session undefined. nodeJS express

그러나 처음에는 몇 가지 테스트 (모듈러스 사용)를 위해 사이트를 배포 한 후 req.session이 정의되지 않았다는 오류가 나타납니다. 이 코드는 localhost에서 실행할 때 여전히 잘 작동합니다.

이것은 실제로 내 첫 번째 웹 프로젝트이며, 내가 모르고 길을 통해 배워야 만하는 많은 명백한 요점과 트릭이있었습니다. 어쩌면 내가 여기 뭔가 간단하고 분명한 것을 놓치고있어, 몰라!

package.josn 종속성 :

"dependencies" : { 
     "express" : "~3.4.4", 
     "mongoose" : "~3.6.2", 
      "socket.io":"1.x" , 
     "bcrypt-nodejs" : "0.0.3", 
     "connect-redis": "1.4.x" , 
     "body-parser" : "1.4.3" , 
     "cookie-parser": "~1.0.0", 
     "express-session": "~1.0.0" 
    } , 

응용 프로그램 구성

var express = require('express') ; 
var app = express() ; 
var http = require('http') ; 
var io = require('socket.io') ; 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose') ; 
var mongoose1 = require('mongoose') ; 
var bcrypt = require('bcrypt-nodejs') ; 
var PORT = process.env.PORT || 8080 ; 
var server = http.createServer(app) ; 
var RedisStore = require('connect-redis')(express); 

app.configure(function() { 
    app.use(express.static(__dirname + "/static")) ; 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()) ; 
    app.use(express.session({ 
     store: new RedisStore({ 
      host: 'localhost', 
      port: 6379, 
      db: 2, 
      pass: '****' 
     }), 
     secret: '12345qwr' 
    }) 
    ); 

}) ; 

을하고 난 req.session에 도달했을 때 [] 내 서버, 응용 프로그램이 충돌하고 다시 시작 REQ 때문이다.. 세션이 정의되지 않았습니다. 내가 로그인 버튼을 POST 요청을 클릭 예를 들어 은 "/ API/로그인"또는 ..

app.post('/api/login' , function (req, res) { 
     UserDBModel.findOne({ username : req.body.user } , function (err, user) { 
      if (err) { res.json(err) ; } 
      if (user) { 
       if (bcrypt.compareSync(req.body.pass , user.password)) { 
        req.session.Auth = { username : user.username , password : user.password } ; 
//app crashes here with error : TypeError: Cannot set property 'Auth' of undefined 

    }) ; 

PS 전송됩니다. 인증을 위해, 나는 사용자 세션에 로그인 한 사용자의 암호와 해시 된 암호를 포함하는 "Auth"개체를 저장합니다.

답변

1

대신 app.use(express.session(는 사용하려고 : app.use(express.cookieSession());는 다음 request.session 개체를 액세스 할 수 있습니다 ...

+0

나는이 문제에 대한 답변을 검색 한 레디 스 서비스를 실행하고 있는지 확인 이 문제의 대부분의 다른 모든 인스턴스에서 코더가이를 코딩하여 res 객체가 변수를 설정하기 전에 클라이언트에 응답 할 것이기 때문에 잠시 동안 모든 솔루션이 저에게 효과적이지 않았습니다. 이것은 전혀 나를 위해 사실이 아니었다, 이것은 일을 잘하는 것 같다, 많이 고마워! –

1

것은 당신이

sudo service redis-server start