# express session
Express Session
Session 사용자 정보와 같은 민감한 정보는 쿠키로 주고 받으면 중간에 정보가 탈취당했을 때 타격이 크다. 따라서 민감한 정보는 서버에서 사용자별로 저장하여 관리하고 쿠키로는 사용자를 식별할 수 있는 id만 주고받는다. 물론 id마저 탈취당해서 악의적인 공격자가 다른 사용자로 위장할 순 있지만, 민감한 정보자체를 탈취당한것이 아니기 때문에 세션을 이용하는 것이 더 낫다. id탈취를 방지하는 여러 기술도 있다. 쿠키 자체의 수명관리를 설정할 수 있고(Max-Age), 자바스크립트에서 쿠키를 볼 수 없도록 할 수 있고(HttpOnly) 서버와 주고받는 데이터 자체를 암호화하는 프로토콜(HTTPS) 등 여러가지 보안기술들이 있다. Session Flow 기본적인 골격은 위와 같다. 로그인 페이지에서 폼 제출을 하면 /login_process 로 action 한다. 사용자 정보는 보통 db에 저장되어있지만 여기서는 단순 Object로 구성했다. `/login_pro
소셜 로그인 후 사용자 정보 렌더링 이슈 해결: 비동기 세션 저장
서론 기록을 남기는 연습을 시작해보고자 이슈 블로깅을 작성해봅니다. 이 프로젝트에서 사용되는 기술은 NodeJS. MongoDB. ES6. Express, HTML5, CSS3, Pug 입니다. 유튜브 클론코딩(nomadcoders)을 예습하는 중 소셜로그인을 한 뒤 루트페이지로 리다이렉트 했을 때 사용자 정보가 반영되지 않는 문제가 발생했습니다. 이 과정에서 소셜로그인 후 세션을 저장하는 데 시간이 걸리고 그 과정에서 비동기처리가 필요하다는 것을 알게 되었습니다. 이슈 상황 설명 소셜로그인을 한 후 루트페이지로 리다이렉트했을 때, 화면처럼 로그인한 사용자정보가 반영되어 보여져야합니다. 그러나 사용자 정보가 담긴 쿠키는 생성되었지만, 로그인 전 페이지처럼 아무 정보도 반영되지 않

express (6)
express 기존 http 모듈로 웹 서버를 만들어보니 코드를 읽기 힘들고, 확장성도 떨어졌다. 이를 프레임워크로 해결할 수 있다. 대표적인것이 express, Koa, Hapi가 있다. app.set('port', 포트) >> 서버가 실행될 포드를 지정할 수 있다. app.get('주소', 라우터) >> get요청이 올 때 어떤 동작을 할지 지정할수 있다. app.listen('포트', 콜백) >> 몇번 포트에서 서버를 실행할지 지정할수 있다. 요청 한번에는 응답 한번이어야 하기 때문 하나의 라우터에서는 하나의 send만 보내야 한다. (미들웨어 포함) (Error: Cannot set headers after they are sent to the client) html파일 주기 path를 사용해서 경로처리를 해준다. 미들웨어 use의 3번쨰 파라미터에는 next가 존재하는데 이 next를 실행시켜줘야 라우터에 맞게 실행된다. next 다음미

토이 프로젝트_ 포토앨범 (1단계 서버 세팅, DB 연결)
프로젝트 구조: 우선 VS code에 프로젝트 구조를 아래와 같이 설계했다. 그리고 필요한 프로그램들을 express, multer, mongodb, mongoose, ejs, env, nodemon 등을 설치했다. 1. env 파일에 DB 정보 입력하기 (env 파일은 비공개 파일로 주로 민감한 정보를 저장하는데 쓴다). 2. 서버 세팅과 설치한 프로그램 import 하기 main.js에 서버를 세팅하고 파일업로드, DB 연결, ejs 템플릿 셋업을 한다.nodes 에서는 require () 을 사용해서 설치해둔 프로그램들을 import 한다. 3. express 를 사용해서 서버를 5000포트로 연결시킨다. 4

Session
session을 알기 전에 먼저 cookie에 대해 알아야 한다. 쿠키(cookie)란? 쿠키(cookie)란 웹 사이트에 접속할 때 서버에 의해 사용자의 컴퓨터에 저장되는 정보를 의미합니다. 웹 사이트는 이렇게 저장된 사용자의 정보를 클라이언트(client) 측의 컴퓨터에 남겨서 필요할 때마다 재사용합니다. 사용자의 컴퓨터에 마치 과자 부스러기가 남아 있는 것과 같다고 해서 '쿠키(cookie)'라는 명칭이 붙었습니다. 사용자의 정보가 컴퓨터에 고스란히 남기 때문에 사생활 침해의 우려가 있으며, 보안과 관련된 이슈를 가지고 있습니다. 세션(session)이란? 세션(session)이란 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 의미합니다. 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 합니다. 쿠키는 클라이언트 측의 컴퓨터에 모든 데이터를
[Dimelo Project] 배포 후 쿠키가 안오는 문제
문제상황 클라이언트와 백엔드 모두 배포하고 https까지 적용하였는데 쿠키가 프론트로 가지않는 문제가 생겼다. 처음엔 cors오류 라고 생각해서 프론트와 백엔드 cors도 다 맞췄지만 그래도 오지 않았다. 이런 오류들이 나와서 처음에는 sameSite: none, secure: true라고 설정하였지만 그래도 쿠키가 전달되지 않았다.. cors오류 인것 같아서 heroku로 proxy server도 만들어보았지만.. 그래도 실패 ㅠㅠ 하지만

2.7
mysql 접속방법 > mysql -u root -p 화면 가리고 큰 제목만 보면서 풀어보기. mysql : https://velog.io/@elinapark/MySQL HTTPS https를 쓰려면 인증서는 무조건 필수다 인증서 설치 mkcert라는 프로그램을 이용해서 로컬 환경(내 컴퓨터)에서 신뢰할 수 있는 인증서를 만들 수 있습니다. HTTPS 서버 작성 Node.js 환경에서 HTTPS 서버를 작성하기 위해서는 https 내장 모듈을 이용할 수 있습니다. express.js를 이용해 https 서버를 만들 수도 있습니다. 먼저는 방금 생성한 인증서 파일들을 HTTPS 서버에 적용해 주는 작업이 필요합니다. Node.js https 모듈 이용 expres

[TS express] 세션 인증
JWT의 장단점 > 암호화방식이나 타입과 함께 유저아이디, 유효기간 등을 jwt서버로 전달하면 그 정보들을 jwt가 해독할 수 있는 토큰으로 발행받는다. 따라서 토큰에는 모든 정보들이 jwt만 읽을 수 있는 형태로 저장되어 있다. > 서버에 데이터를 저장하지 않아(stateless)서 스케일링, 유지보수에 유연하다. 근데 페이스북 정도가 아니면 스케일에 대응하기 어려운 것은 아닌것 같다. jwt정보를 다른 사람이 훔치게 되면 훔친 정보로 로그인이 가능해진다. 토큰 유효기간을 짧게 하고 대신 refresh토큰을 사용하면 된다. ⇒ 어디차박에 적용해보자! 전달된 토큰은 돌이킬 수 없다. 악의적인 사용자가 유효기간전 정보 탈취가 가능해질 수 있다. 물
node.js express 기반 서버 구동 기본 세팅
1. express.urlencoded() application/x-www-form-urlencoded타입으로 들어오는 데이터를 req.body로 파싱해주는 역할을 합니다. 옵션 값: extend: boolean => true면 내장 모듈인 querystring사용, false면 설치해야하는 qs사용 enctype이 application/x-www-form-urlencoded인 데이터는 name=john&age=2같은 형식으로 데이터가 전달된다. 해당 데이터를 파싱해서 객체형태로 req.body에 넣어주는 역할을 한다. 2. express.json() application/json타입으로 들어오는 데이터를 req.body로 파싱해주는 역할을 합니다. 3. express.static() 정적 파일들을 제공해주는 역할을 한다. 사용 예시: `app.use(express.static("/", pat
11월 22일 (월) express-session
session > $ npm install express-session > var session = require('express-session') session(options) > ex GitHub: express-session req.session Session.regenerate(callback) will have a new session Session.destroy(callback) cannot access session Session.reload(callback) session updated Session.save(callback) session saved Session.touch()

express - session 메소드
req.session 세션은 쿠키처럼 사용자의 정보를 그대로 값으로 가지지 않고 cid나 sessionId만을 쿠키에 넣고, 서버에서 관리하기 때문에 탈취해도 값을 알아내기가 어렵다. express-session은 node.js에서 이를 가능하게 해준다. app.use로 session 미들웨어를 쓰면 되는데, session 미들웨어는 매개변수로 객체를 받는다. 객체 안에는 secret, resave, saveUninitialized, cookie, store 등 여러 가지 옵션이 있다. req.session으로 세션 객체에 접근할 수 있으며, 생성도 가능하다. 사용해본 method req.session.save(callback) 세션을 저장소에 저장하고 저장소의 내용을 메모리의 내용으로 바꿔줌 HTTP 응답이 끝날 때 자동으로 후출되어서 일반적으로는 굳이 호출할 필요가 없다. redirects를 할때에는 유용하게 사용한다고 하는데 아직 와닿지는
connect-mongo
connect-mongo? cookie와 session을 통해 로그인을 구현할 수 있게 됐다. 그러나 문제가 있다. session이 서버에 저장된다는 것이다. 더 정확히 말하면 session ID는 cookie에 저장되고, session data는 서버에 저장된다. 즉, 서버를 다시 시작하면 session 정보가 사라진다는 뜻이다. 따라서 session을 서버가 아니라 DB에 저장해야 안전하다. 사용방법 store option에 추가해주면 끝. 기타 resave > Forces the session to be saved back to the session store, even if the se

IM 52일차
TIL https : Hyper Text Transfer Protocol Secure Socket layer 약어 http에 보안요소 강화 통신 데이터를 암호화하여 전달하고 인증서 정보 확인가능 hashing 임의의 길이의 자료를 고정된 길이의 자료로 매핑하는 것. 이를 통하여 자료를 암호화할 수 있다. 하지만 주어진 자료는 같은 해시만을 가지기에 보안에 대한 약점이 존재. 이를 보완하기 위해 추가적인 자료(salt)를 더하여 해싱하여 사용함. cookie >쿠키(영어: cookie)란 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컫는다. express-session(cookie와 유사하게 사용되는(그렇지만 같지 않은) session을 구현 하는 모듈) <a h

express-session 정리(3)
안녕하세요. express-session 정리(2)에 이어 추가적으로 정리를 해보겠습니다. 코드를 이용하여 실습을 해보겠습니다. 기존 코드에 추가한 코드만 한번 알아보도록 하겠습니다. 만약 클라이인트에서 '/login' post 요청을 보냈을때 위의 미들웨어를 장착했기 때문에 요청 온 본문 내용을 req.body를 통해서 확인을 할 수 있 습니다. 저같은 경우 req.body를 콘솔 창에 찍어보면 => 이 부분은 클라이언트 페이지에서 작성을 해줘야지 이런 양식으로 옵니다. ES6문법을 사용 하여 선언과 동시에 변수에다가 값을 넣어버렸습니다. username 변수에는 'babo'라는 값이 들어 가 있습니다. express-session으로 만들어진 객체에 값을 넣을 수 있습니다. express-session이 응답을 보낼때 헤더에다가 쿠키를 심어서 보내고 브라우저는 그 쿠키를 저장해두고 요청을 보낼 때 계속 재사용을 해서 이 쿠키값을 해석

expression-session(2) 정리
안녕하세요. express-session(1) 정리에 이어 글을 이어서 써 보겠습니다. 우선 서버에서 쿠키를 보내는 방법을 한번 구현해보겠습니다. 우선 터미널창을 열고 위에서 보듯이 띄어쓰기 하나로 한줄에 여러개의 모듈들을 한번에 설치를 할 수 있습니다.(꿀팁) VSCode상에서 index.js 파일을 하나 만듭니다. 이렇게 3개를 require를 해줍니다. 그리고 여기서 미들웨어라는 말이 있는데 어떤 추가기능을 덧붙인다라고 생각을 하시면 편합니다. 나는 을 통해서 express.json() 기능을 추가할꺼야(요청 바디값을 읽을 수 있게). app.use()를 통해서 미들웨어를 장착 할 수 있습니다. 계속 Go 만약 '/' 에서 get 요청이 온다면 쿠키값은 cook = good 형태로 보낼 것이고 옵션값을 추가하였습니다. 옵션 > maxAge : 만료 시간을 밀리초 단위로 설정 expires : 만료 날짜를 GMT 시간으로 설정 path :