
1. Edit Profile - router나 controller쪽은 이제 이해했으므로 제외 - locals를 배웠을때를 떠올려봐야함 - 우리는 saveUninitialized=false로 했기에 session에 변경점이 있어야 cookie가 생성됨 - 현재 계정정보를 변경하려는 상태이기에 우리는 이미 로그인을 한 상태 - localsMiddleware를 통해 locals object에는 로그인한 user 정보가 들어가있음 - 굳이 controller을 통해 로그인한 user 정보를 보낼 필요가 없다는 것 - template에서도 locals를 사용할 수 있음 - locals는 자동적으로 views에 import됨 - 여기서 문제점은 로그인하지 않은 user가 url을 강제로..
0. API - https://docs.github.com/ko/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app GitHub 앱에 대한 사용자 액세스 토큰 생성 - GitHub Docs사용자에게 앱 활동을 배정하기 위해 GitHub App에 대한 사용자 액세스 토큰을 생성할 수 있습니다.docs.github.com1. startGithubLogin - github 로그인 버튼을 누르면 userRouter에 생성한 route인 /users/github/start로 이동 - route는 startGithubLogin을 가지고 있고 이동시켜주는 역할만 수행 - 상단 링..
1. email - 들어가기에 앞서 굉장히 어려울 수 밖에 없는 과정이었기에 정리 - Github이 준 code를 가지고 access_token으로 교환했음 - code에는 우리가 뭘 하고자 하는 바가 명시되어 있음 - access_token은 Github API URL을 fetch하는데 사용되었고, 우리는 user의 public정보를 얻었음 - read:user를 하지 않았다면 access_token을 얻지 못했음 - access_token이 모든걸 할 수 있도록 허용한건 아니며 scope에 명시된 것만 허용해줌 - 현재 read:user를 통해 user의 정보는 잘 읽고 있으나 user:email은 잘 되고있지 않음 - 사실 이렇게 잘 안되는 이유는 강사가 access_token으로 많은..
1. Github Login - 이어서 하면 github에서 authorized버튼을 누른 이후 callback url로 연결되었음 - https://docs.github.com/ko/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#2-users-are-redirected-back-to-your-site-by-github OAuth 앱 권한 부여 - GitHub Docs다른 사용자가 OAuth app에 권한을 부여하도록 설정할 수 있습니다.docs.github.com - 공식문서의 웹 애플리케이션 흐름 2번에 따르면 github에서 받은 토큰을 access 토큰으로 바꿔줘야함 - client_id는 또 사용되기에 .env에 넣을거임 - 어차피 ..
1. Dotenv - https://www.npmjs.com/package/dotenv dotenvLoads environment variables from .env file. Latest version: 16.4.5, last published: 9 months ago. Start using dotenv in your project by running `npm i dotenv`. There are 50409 other projects in the npm registry using dotenv.www.npmjs.com - dotenv 패키지를 사용하여 .env 파일을 읽게하고, 각 변수들을 process.env안에 넣을거임 - 중요한 것은 공식문서에도 나와있지만 당신의 앱 안에서 최대한 먼저 라고 되어 ..
1. Secret / Domain - secret이란, cookie에 sign할 때 사용하는 string - cookie에 sign하는 이유는 백엔드가 cookie를 줬다는걸 증명하기 위함 - session hijack이라는 해커의 공격 패턴이 존재하기 때문 - secret을 관리하기 위해 굉장히 길고 무작위로 생성되게 관리 - domain은 cookie를 만든 백엔드가 누구인지 알려줌 - 브라우저는 domain에 따라 cookie를 저장하도록 되어 있음 - 그리고 cookie는 domain에 있는 백엔드로만 전송 - 현재 웹사이트는 localhost이므로, 다른 웹사이트의 cookie를 받지 않음 - 일단 secret과 db url을 보호해야 하는데, 환경변수(environment file)..
1. 정리app.use( session({ secret: "Hello!", resave: true, saveUninitialized: true, })); - 해당 middleware는 express-session이라는 module에서 왔으며, 브라우저가 백엔드와 상호작용 할 때 마다 브라우저에 cookie를 전송 - cookie는 백엔드에서 브라우저에게 주는 정보인데 정해진 규칙이 있음 - 매번 백엔드에 request 할 때 마다 브라우저는 자동적으로 request에 cookie를 덧붙임 - 브라우저는 매번 백엔드의 localhost에 있는 URL로 request를 보낼 때 마다 cookie가 request와 함께 전송된다는 것을 알고 있음 - cookie에는 아무 정보나 넣을 수 있..
1. Cookie Session (1) - 이전까지는 account가 존재하는지, account의 password가 맞는지만 확인하였음 - 이제는 서버가 로그인을 시도한 유저를 기억하는 방법을 알아야 함 - 그 방법 중 하나가 cookie이며, cookie를 이해하기 전 먼저 session에 대해 알아야 함 - session이란, 백엔드와 브라우저 간에 어떤 활동(history)을 했는지 기억(memory)하는걸 말함 - 백엔드와 브라우저간 정보가 있어야 됨 - 현재 home으로 이동하면 GET request가 발생하는데, 백엔드에서 HTML을 render하고 나면 연결이 끝남 - 즉 연결이 지속되지 않는 무상태(stateless) - request를 받고 처리되면 서버도 브라우저도 곧바로 ..
1. Login// userController.jsexport const postJoin = async (req, res) => { const { email, username, password1, password2, name, location } = req.body; if (password1 !== password2) { return res.status(400).render("join", { pageTitle: "Join", errorMessage: "Password confirmation does not match.", }); } const exists = await User.exists({ $or: [{ username }, { email }] }); if (ex..
1. Status Code - 우리가 회원가입을 하고 나면 보통은 브라우저가 아이디와 비밀번호를 저장할건지를 묻는 창이 뜸 - 하지만 회원가입이 정상적으로 완료되었는가를 브라우저가 확인했는지 여부는 여전히 우리가 알 수 없음 - 우리의 회원가입 화면에서는 중복되는 email이나 username이 있으면 여전히 에러메세지가 출력되기 때문 - https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP status codes - WikipediaFrom Wikipedia, the free encyclopedia This is a list of Hypertext Transfer Protocol (HTTP) response status codes..