복붙노트

[REDIS] 모든 요청 익스프레스 변경 세션

REDIS

모든 요청 익스프레스 변경 세션

내가 로그인하는 기능을 가지고

app.post('/doLogin', function(req,res){
        db.users.findOne({username: req.body.username}, function(err, user) {
            if( err ) {
                console.log("Login fail");
            } 
            else if (user != null) {
                if (req.body.password == user.password) {
                    req.session.user_role = "user";
                    req.session.save();
            } else {
                req.session.user_role = "null";
                console.log("Wrong login");
            }
        }
        res.send({redirect: "/"});
    });

});

이 함수는 세션 req.session.user_role = "사용자"로 변수를 저장하기 위해 사용된다; 그러나 체크 사용자에게 새로운 요청 또는 기록되지 않은 경우

app.get('/', function(req,res){
    redis.get('sess:' + req.session.id, function(err, result){
        console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null }));
    });
    if ((req.session.user_role == "user")) {
          console.log("Logged in");
    } else {
        console.log("Logged out");
    }
});

세션이 변경되기 때문에 그리고, 항상 "로그 아웃"되어 돌아갑니다. 내가 저장 세션 레디 스를 사용하여, 나는 그것이 레디 스 오류라고 생각하기 때문에 내가 레디 스 사용을 중지, 그것의 OK 제발 도와주세요!

해결법

  1. ==============================

    1.일을하는 가장 좋은 방법은 가능한 경우 항상 함께 익스프레스 거래를하도록하는 것입니다.

    일을하는 가장 좋은 방법은 가능한 경우 항상 함께 익스프레스 거래를하도록하는 것입니다.

    https://flaviocopes.com/express-sessions/ (업데이트 세션 튜토리얼 링크가 답을 고려되어서는 안하지만)

    어떻게 Express에서 세션 레디 스를 설정 보여줄 수있는 링크가 있습니다. 노드 미들웨어를위한 일이다 즉, 세션을 다루는 경우에도 쿼리가 자신을 레디 스에 당신은 안됩니다.

  2. ==============================

    2.익스프레스 세션은 세트에 쿠키를 사용하거나 클라이언트에서 세션 ID를 얻을 수

    익스프레스 세션은 세트에 쿠키를 사용하거나 클라이언트에서 세션 ID를 얻을 수

    문서에 명시된

    포인트 아래를 기억 :

    cookie: { secure: false }
    

    예를 들어 :

    app.use(session({
      // your settings
      cookie: { secure: false }
    }))
    
  3. ==============================

    3.아마 코드에서 일부 비동기 오류가 있습니다. 당신이 콜백 함수에 코드를 넣을 수 있도록 (콜백 등) 비동기 작업을 할 때마다, 당신은, 당신의 나머지 코드는 콜백 함수 후에 실행되어 있는지 확인해야한다. 다만이 같은 :

    아마 코드에서 일부 비동기 오류가 있습니다. 당신이 콜백 함수에 코드를 넣을 수 있도록 (콜백 등) 비동기 작업을 할 때마다, 당신은, 당신의 나머지 코드는 콜백 함수 후에 실행되어 있는지 확인해야한다. 다만이 같은 :

    db.users.findOne({username: req.body.username}, function(err, user) {
      if( err ) {
        console.log("Login fail");
      } 
      else if (user != null) {
        if (req.body.password == user.password) {
          req.session.user_role = "user";
          req.session.save();
          res.send({redirect: "/"});
        } else {
          req.session.user_role = "null";
          console.log("Wrong login");
          res.send({redirect: "/"});
        }
      }
    });
    

    그리고 app.get은 다음과 같은 모양입니다 :

    app.get('/', function(req,res){
      redis.get('sess:' + req.session.id, function(err, result){
        console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null }));
        if ((req.session.user_role == "user")) {
          console.log("Logged in");
        } else {
          console.log("Logged out");
        }
      });
    });
    
  4. ==============================

    4.{보안 : 사실이} 경우 설정, 당신은 HTTP를 통해 사이트에 액세스하고, 쿠키가 설정되지 않습니다. 따라서, 각 요청은 새로운 세션을 생성합니다.

    {보안 : 사실이} 경우 설정, 당신은 HTTP를 통해 사이트에 액세스하고, 쿠키가 설정되지 않습니다. 따라서, 각 요청은 새로운 세션을 생성합니다.

  5. ==============================

    5.모든 답은 지금까지 도움이 있지만 직접 보안 사용하여 문제가 해결되지 않습니다 : 사실.

    모든 답은 지금까지 도움이 있지만 직접 보안 사용하여 문제가 해결되지 않습니다 : 사실.

    보안 사용하려면 : 사실 당신은 보안 쿠키 HTTPS에 대한 지원이 있어야합니다. 또한 당신은 크로스 사이트 액세스 제어를위한 withCredentials을 사용해야합니다. withCrendentials : 사실은 같은 사이트 요청에 영향을주지 않습니다.

    https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

    라이브러리의 대부분은 각도 및 DROPZONE 그들의 구성에서이 매개 변수를 지원합니다.

  6. from https://stackoverflow.com/questions/20814940/express-change-session-every-request by cc-by-sa and MIT license