일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- tPerRow hn측
- nodejs
- app.js
- 설치
- passport
- lowdb
- 자동
- 함수
- 실행
- Web2
- Passport.js
- 객체
- nodemon
- /bin/www
- round
- dr 학교측
- node.js
- JavaScript
- Generator
- local
- Web
- math
- 생활코딩
- 데이터
- template
- 객체정의
- 객체란
- sanitize
- express
- 모듈
- Today
- Total
목록웹 개발/Express Session & Auth (13)
괜찮아 잘하고있어 힘내

37) 세션 생성하는 코드를 라우터 기능들 밑에 두면 오류가 생긴다. 라우터연결하는 부분과 각 경로별로 정적파일 적용할수 있게 하는 소스 사이에 두니까 실행된다.

현재 http를 이용해서 웹서버와 브라우저가 통신하고있다. http로 통신을 하고 있다는 것은 누군가 통신 내용을 보고있다고 말할 수 있다. 세션 id를 도둑맡는다면 누군가가 우리 대신 로그인 할 수 있다. 그래서 https 를 이용해서 통신을 해야한다. secure을 true로 설정하면 https에서만 세션정보를 주고받도록 처리할 수 있다. 사용자가 전송한 데이터에 자바스크립트가 포함돼 있고 그 자바스크립트가 활성화 될 수 있는 상태라면 사용자는 자바스크립트를 이용해서 세션, 쿠키 아이디를 탈취해 공격자에게 전송할 수 있다. 이를 막기 위해선 사용자가 전송한 데이터에서 자바스크립트를 사용할 수 없도록 하는것이 필요하다. HttpOnly 를 true로 설정하면 자바스크립트를 통해서 세션쿠키를 사용할 수 ..

페이지를 생성하는 create 페이지에서 내용을 입력하고 submit을 클릭하면 /create_process 로 넘어가 페이지를 생성하는 작업을 한다. 이 부분에서 로그인을 하지 않은 상태라면 접근을 막아야 한다. 27) auth.isOwner( )는 사용자가 로그인 상태면 true, 로그인 상태가 아니면 false를 반환하는 함수이다. 만약에 auth.isOwner( )가 반환한 값이 거짓이라면(소유자가 아니라면) 즉, 로그인 상태라면 true를 반환할 것이고 true의 !가 붙으면 부정이기 때문에 false가 된다. if문의 false가 되면 조건문이 실행되지 않고 바로 31번 줄부터 실행된다. 하지만 로그인 상태가 아니라면 false를 반환할 것이고 false의 !가 붙으면 true가 된다. if문..

로그아웃기능은 정보를 전송할 일이 없기 때문에 get 방식으로 사용해도 된다. 46) get 방식으로 받고, pathname이 /auth/logout일때 실행된다. 47) .destroy( ) 를 사용하면 세션이 삭제된다. 그리고 안에 callback 함수가 실행된다. 48) 세션이 삭제되고 실행되는 부분인데 response.redirect('/'); 를 사용해 홈으로 리다이렉션 시킨다. logout 버튼을 누르면 모든 페이지의 logout링크가 login 링크로 바뀌고 sessions 디렉토리 안에 세션 파일도 삭제되고 새로운 세션파일이 생긴다. 당연히 새로운 세션파일에는 로그인 정보가 들어있지 않는다.

lib 디렉토리 안에 auth.js 에 index.js 안에 있던 로그인 상태를 체크하는 기능의 authIsOwner 함수와 로그인 상태를 체크하고 해당하는 링크를 반환하는 authStatusUI 함수를 따로 파일에 저장해 꺼내쓰도록 할것이다. 그 이유는 index.js 내에서만 사용하는게 아니라 다른 파일에서도 사용해야 하기 때문이다. 그리고 이름을 isOwner와 statusUI로 바꿔준다. 11) 같은 파일내에 있는 isOwner를 사용할것이기 때문에 this.을 적어준다. 4) index.js 파일의 상위 디렉토리(..) 에서 lib디렉토리 안에 auth를 모듈로 선언해 준다. 17) auth모듈의 statusUI를 호출 -------------- 오류 ------------------------..

콘솔에 request.session 정보를 출력해보면 이런식으로 들어있다. 그리고 우리는 로그인 상태를 is_logined 값이 true인지를 보고 알 수 있다. 5) 로그인 상태를 검사하고 반환하는 함수. 6) 세션에 저장된 is_logined 값이 true이면 7) true를 반환 8) 그렇지 않다면(false라면) 9) false를 반환 로그인이 성공했다면 index화면(홈)에서 login 링크가 logout으로 바껴야 한다. 2) authStatusUI라는 매개변수를 주고 매개변수의 기본값을 login태그로 준다. authStatusUI 값이 없으면 기본적으로 'login' 코드가 실행된다. 11) login또는 logout 링크가 들어갈곳이다. 13) 로그인 상태를 확인하고 그에 따른 login..

이제 세션을 사용해야하기 때문에 main.js에 세션 미들웨어를 설치해야한다. 9) 세션 미들웨어 추가 10) 세션을 파일에 저장할것이다. 데이터베이스에 저장하는게 바람직하지만 연습하는것이기때문에 일단 파일로 저장한다. 16~21) 세션을 실제로 미들웨어로서 우리의 앱에 설치하는 코드를 추가한다. 그럼 application(app)으로 접속할 때마다 세션이 생성된다. 16) 로그인 검사 17) 로그인 성공했을시 세션에 로그인 성공했다고 true로 저장한다. 18) 로그인 성공했을 시 세션에 닉네임을 저장한다. 실행시켰을때 express-session 모듈을 찾을 수 없다고 뜬다면 npm install express-session npm install -s session-file-store 두가지를 설치해..

사용자의 id, password, nickname을 객체로 적어둔다. 원래는 비밀번호가 소스코드에 있으면 안된다. 여기서는 연습용으로 하는것이다. 비밀번호는 평문으로 저장하면 안되고 해쉬, 비밀번호 암호화 와 같은 방법으로 비밀번호를 관리자들도 볼 수 없도록 하는 작업을 해야한다. 그리고 여러사람의 인증 시스템도 필요하다. 일단은 실습이기 때문에 한사람의 인증시스템이고 해쉬나 비밀번호 암호화 같은 방법은 현재 쓰지 않는다. router.get('/create_process', ) 부분을 복사해서 사용해도 된다. 31) pathname이 /auth/login_process 일때 실행된다. 32) post방식으로 넘어온 데이터를 post변수에 담는다. 33) 넘어온 데이터 중 email값을 email 변수에..

nodejs-express 수업때 완성한 예제를 가지고 이어서 실습한다. lib - tempate.js 파일을 수정해 로그인 링크를 만든다. 11) login 링크 추가. routes 디렉토리 안에 topic.js파일을 복사하고 붙여넣은 다음 이름을 auth.js로 바꿔준다. 그리고 auth.js의 내용을 주석처리한다. 맨 마지막줄은 살려둔다. 그리고 auth 라우터를 추가해준다. 그리고 /auth 라우터일때 authRouter로 들어간다고 적어준다. 주석처리한것 중에서 /create 에 해당하는 부분을 복사해서 가져다 쓴다. 그리고 밑줄친 내용들로 수정해 준다. login 페이지 변경하면 이런 식으로 나온다. 그리고 login 버튼을 누르면 일단 login_process 로 넘어가는것을 확인할 수 있다.

www.npmjs.com/package/express-session express-session Simple session middleware for Express www.npmjs.com 이 페이지에서 아래쪽에 Compatible Session Stores 항목을 보면 npm install -s session-file-store 을 이용해 설치해준다. 4번과 12번 라인 내용을 추가한다. 그리고 node express-session.js 를 사용해 실행하면 nodejs 디렉토리 안에 sessions 라는 디렉토리가 새로 생기고 그안에 알수 없는 이름의 파일이 생긴다. 그 파일 안에는 num 이라는 값이 있고 페이지를 새로고침 할때마다 즉각적으로 바뀐다. 우리가 지금 사용하고 있는 express-sess..