2017-02-26 1 views
0

로그인 할 때 쿠키를 설정하려고하지만 쿠키가 다음 요청을 따르지 않는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? (nooby 질문이라면 죄송합니다.다음 요청에서 세션 쿠키가 설정되지 않았습니다. - Express.js

app.js

let express = require("express"); 
let session = require("express-session"); 
let bodyParser = require("body-parser"); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(session({ 
    secret: "secret", 
    resave: false, 
    saveUninitialized: false, 
    cookie: { secure: true } 
})); 

내가 "/ 홈"에 대한 다음 요청을 수행 할 때 다음, 세션 쿠키는 사용자 (REQ에 대한 값을 보유하지

router.route("/login") 
    .get(function(request, response) { 

     response.render("../views/partials/login"); 
    }) 

    .post(function(request, response) { 

     let username = request.body.username; 
     let password = request.body.password; 

     User.findOne({user: username}, function(err, user) { 
      if (err) { 
       // Some error handling 
      } 

      // test password if matching 
      if (user !== null) { 
       user.comparePassword(password, function(err, match) { 
        if (err || !match) { 
         console.log("The user could not be found") 
        } 

        request.session.Auth = { username: username, password: password }; 
        response.redirect("/home"); 
        response.end(); 
       }); 
      } else { 
       // some error handling 
      } 
     }); 

    }); 

라우터. session.Auth는

router.route("/home") 
    .get(restrict, function(req,res) { 

console.log(req.session.Auth) // -> undefined 
     res.render("../views/home") 
    }); 

)

어쩌면 나는이 일을 해요 undefined를 반환 잘못되었지만 request.session에 Auth 값이없는 이유를 이해할 수 없습니다. 누군가 제발 도와 줄 수 있니?

P. 여권 같은 승인을 처리하는 모듈을 사용하고 싶지 않습니다.

답변

0

당신이하고있는 일은 잘되지 않을 것입니다.

정말 인증을 위해 passport.js을 사용하는 것이 좋습니다. 그것은 매우 간단하며 지금하고있는 많은 작업을 제거합니다. 이 게시물 요청에서 요청 개체에 액세스하면 아무런 반응이 없습니다.

+0

나는 학습 목적으로 passport.js를 사용하고 싶지 않다는 것을 잊어 버렸다. :). 그런데 왜 작동하지 않습니까? – Jesper

+0

요청 오브젝트에는 클라이언트에서 작성된 요청과 관련된 데이터가 있습니다. 클라이언트가 응답을 얻는 유일한 방법은 요청이 클라이언트로 되돌아 가지 않는 것입니다. – paqash

+0

그러면 응답으로 세션 쿠키를 보낼 수 있습니까? – Jesper

0

이렇게 시도하십시오.

app.use(express.cookieParser('S3CRE7')); 
app.use(express.cookieSession({ 
    key: 'app.key', 
    secret: 'app.secret' 
})); 
app.use(app.router); 

명시

에서

먼저 활성화 쿠키 세션 쿠키 세션을 활성화 한 후, 당신은/얻을 request.session 위해 무엇을 적 속성을 설정할 수 있습니다.

나머지 로직은 괜찮다고 생각합니다.

+0

express 4 ^에서 작동하지 않습니다. 반환 : 대부분의 미들웨어 (예 : cookieParser)는 더 이상 Express와 번들로 제공되지 않으므로 별도로 설치해야합니다. https://github.com/senchalabs/connect#middleware를 참조하십시오. – Jesper

+0

그래서 우리는 미들웨어를 프로젝트로 가져올 수 있습니다. – kamprasad

0

HTTPS에서 앱을 테스트하고 있습니까? 그렇지 않다면, 당신은 안전한 쿠키가 HTTPS를 사용하는 경우에만 전송됩니다 쿠키입니다

app.use(session({ 
    secret: "secret", 
    resave: false, 
    saveUninitialized: false 
})); 

같이 cookie: { secure: true } 재산없이 명시 세션을 초기화해야한다.

관련 문제