[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.일을하는 가장 좋은 방법은 가능한 경우 항상 함께 익스프레스 거래를하도록하는 것입니다.
일을하는 가장 좋은 방법은 가능한 경우 항상 함께 익스프레스 거래를하도록하는 것입니다.
https://flaviocopes.com/express-sessions/ (업데이트 세션 튜토리얼 링크가 답을 고려되어서는 안하지만)
어떻게 Express에서 세션 레디 스를 설정 보여줄 수있는 링크가 있습니다. 노드 미들웨어를위한 일이다 즉, 세션을 다루는 경우에도 쿼리가 자신을 레디 스에 당신은 안됩니다.
-
==============================
2.익스프레스 세션은 세트에 쿠키를 사용하거나 클라이언트에서 세션 ID를 얻을 수
익스프레스 세션은 세트에 쿠키를 사용하거나 클라이언트에서 세션 ID를 얻을 수
문서에 명시된
포인트 아래를 기억 :
cookie: { secure: false }
예를 들어 :
app.use(session({ // your settings cookie: { secure: false } }))
-
==============================
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.{보안 : 사실이} 경우 설정, 당신은 HTTP를 통해 사이트에 액세스하고, 쿠키가 설정되지 않습니다. 따라서, 각 요청은 새로운 세션을 생성합니다.
{보안 : 사실이} 경우 설정, 당신은 HTTP를 통해 사이트에 액세스하고, 쿠키가 설정되지 않습니다. 따라서, 각 요청은 새로운 세션을 생성합니다.
-
==============================
5.모든 답은 지금까지 도움이 있지만 직접 보안 사용하여 문제가 해결되지 않습니다 : 사실.
모든 답은 지금까지 도움이 있지만 직접 보안 사용하여 문제가 해결되지 않습니다 : 사실.
보안 사용하려면 : 사실 당신은 보안 쿠키 HTTPS에 대한 지원이 있어야합니다. 또한 당신은 크로스 사이트 액세스 제어를위한 withCredentials을 사용해야합니다. withCrendentials : 사실은 같은 사이트 요청에 영향을주지 않습니다.
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
라이브러리의 대부분은 각도 및 DROPZONE 그들의 구성에서이 매개 변수를 지원합니다.
from https://stackoverflow.com/questions/20814940/express-change-session-every-request by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스가 다운되면 캐싱 사용 안 레일 (0) | 2020.01.26 |
---|---|
[REDIS] 리눅스에 대한 2.8.7 감시 환경 구성 질문 레디 스, 그것은 자동으로 시작하는 방법을 만들기 위해, 무엇을 가입해야합니까? (0) | 2020.01.26 |
[REDIS] 가장 많은 시간 효율적인 방법으로 직렬화 / 역 직렬화 DataTable을에 / 레디 스에서 무엇입니까? (0) | 2020.01.26 |
[REDIS] StackExchange.Redis와 일시적인 네트워크 오류로 처리 (0) | 2020.01.26 |
[REDIS] sidekiq의 작업의 실행 시간을 줄일 수 (0) | 2020.01.26 |