2주-Project(5)

2019. 11. 6. 15:01카테고리 없음

※개인 학습 블로그 입니다.※

※ajax 에 대하여 포이마웹 참고 ※

https://poiemaweb.com/js-ajax

 

Ajax | PoiemaWeb

비동기식 처리 모델(Asynchronous processing model or Non-Blocking processing model)은 병렬적으로 작업을 수행한다. 즉, 작업이 종료되지 않은 상태라도 대기하지 않고 다음 작업을 실행한다는 의미이다. 예를 들어 서버에서 데이터를 가져와 화면에 표시하는 작업을 수행할 경우 서버에 데이터를 요청한 이후 서버로부터 데이터가 전달될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 작업을 수행한다. 이후 서

poiemaweb.com

 

토큰 인증 - stateless 서버

토큰 사용X - stateful 서버

토큰 발급과 로그인 유지는 별개?

try-catch // new promise 비교

쿠키 , 토큰
토큰 => 헤더에 담아 전송
set cookie?
fetch('/users', {
  credentials: 'same-origin'
})
쿠키 자동저장인지
credential 옵션
cors/ header 옵션 설정
why cannot save cookie
검색어 + best practice / anti-pattern

=======================================초기 고려사항 ==============

cookie 사용

공부해야 할 사항들

- ajax?

- cookie-parser

- 쿠키를 사용하기 위한 기본적 설정들 ( header, cors 설정 )

- 모든 도메인에 대하여 cors 허용 X

   ajax 요청에서 cookie를 저장하기 위해서는 response 헤더의 Access-Control-Allow-Origin 설정이

   와일드카드( * )이면 안된다. 특정 도메인에서만 cors접근을 허용해야 함.

- credential : true (include) 옵션에 대하여

  옵션 적용의 위치??? - credential 옵션의 header 관련 위치

  Access-Control-Allow-Credentials : true 에 대하여 ( cors 설정 형태 )

- postman 에서는 쿠키가 적용됐던 이유는?

  브라우저로 인식하지 않기 때문에 ajax요청이 아니어서  Access-Control-Allow-Origin가 *

  임에도 작동을 했을 것.

- httpOnly 옵션?

  브라우저상에서 javascript로의 접근을 막기 위함?

====================================================================

- node fetch? window fetch? axios? 

- proxy ? 서버와 클라이언트의 도메인을 같은 경로로 인식 하도록 fake

 

jwt 토큰 - 쿠키생성과 토큰 전송

// 쿠키생성, jwt 토큰 전송
signin: async function (req, res) {
    // console.dir(req.headers);
    try {
      let signinData = {
        email: req.body.email,
        password: req.body.password
      };
      let equality = await usermodels.signin(signinData);
      if (equality) {
        jwt.sign({ signinData }, "secretkey", { expiresIn: "30s" }, (err, token) => {
        // jwt.sign 메소드가 비동기적으로 작동하는 것을 console로 확인하여
           promise로 반환함.
          return new Promise((resolve, reject) => {
            if (err) {
              return reject(err);
            }
            else {
              return resolve(token);
            }
          }).then(data => {
            console.log("data::::", data)
            res.cookie("token", data, { httpOnly: true })
            //쿠키생성, 토큰(data)담아서 res 전송.
            console.log("make cookie!");
            res.sendStatus(200);
          }).catch(err => {
            if (err) {
              res.sendStatus(500);
            }
          })
        })
      }
    } catch (err) {
      res.sendStatus(500);
    }
  }