DevLog

[โœ๏ธ Project Dev Log] 2022-01-06 ๋ณธ๋ฌธ

๐Ÿ“ Project - Dev Log

[โœ๏ธ Project Dev Log] 2022-01-06

Seungjae Lee 2022. 1. 6. 23:32

์˜ค๋Š˜์€ ์–ด๋–ป๊ฒŒ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ–ˆ๋‚˜์š”?

  • ์–ด์ œ ์ž‘์—…ํ•œ oauthํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ finalproject์— ์ ์šฉ

์˜ค๋Š˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ํž˜๋“  ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • promise์˜ ๋‚จ์šฉ
// ! naver
const naverUrl = `https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=${naverClientID}&client_secret=${naverClientSecret}&code=${req.body.authorizationCode}&state=${req.body.authorizationState}`;
console.log("naverUrl:", naverUrl);
axios
  .get(naverUrl)
  .then((res) => {
    console.log(res.data);
    if (!res.data.access_token) {
      console.log("@@@ social login fail");
    } else {
      console.log("@@@ token exists");
      axios({
        method: "get",
        url: "https://openapi.naver.com/v1/nid/me",
        headers: {
          Authorization: `Bearer ${res.data.access_token}`,
        },
      }).then((res) => {
        console.log(res.data);
      });
    }
  })
  .catch((err) => {
    console.log(err);
  });

์–ด์ œ oauth๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŒ…ํ•œ ์ฝ”๋“œ๋Š” axios์š”์ฒญ์„ ๋‘ ๋ฒˆ ์—ฐ์†ํ•ด์„œ ๋ณด๋‚ด๊ณ  ์•„์ง ์ž‘์„ฑํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๋ฐ›์•„์˜จ ์‘๋‹ต์„ ๊ฐ€๊ณตํ•ด์„œ ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•ด sequelize.findOrCreate์„ ์‚ฌ์šฉํ•˜๊ณ  ์ด์–ด์„œ ํ† ํฐ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋  ํ…๋ฐ ์ด ๊ณผ์ •์—์„œ axios์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฐฉ์‹์ธ promise๋ฅผ ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

promise๋ฅผ ๋‚จ์šฉํ•˜๊ฒŒ๋˜๋ฉด promise hell์ด ๋ผ์„œ ์‚ฌ์„  ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ณ„์†ํ•ด์„œ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ  ์ด์–ด์ง€๊ฒŒ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง€๋ฉด ์ฝ”๋“œ์—์„œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ํ•˜๊ธฐ๋„ ํž˜๋“ค์–ด์ง€๊ณ  ์ด๋กœ ์ธํ•ด ์•…์ˆœํ™˜์ด ๊ณ„์†๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ฐจํ”ผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ project๋กœ ์˜ฎ๊ธฐ๋Š” ๊น€์— async await ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์ด์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ์ž‘์„ฑํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ๋ณด์ž๋Š” ํŒ๋‹จ์„ ํ–ˆ๋‹ค.

module.exports = async (req, res) => {
  if (!req.body) {
    console.log("no code and state in request body");
    return res.status(401).send({ message: "no code and state" });
  }
  const naverUrl = `https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=${naverClientID}&client_secret=${naverClientSecret}&code=${req.body.authorizationCode}&state=${req.body.authorizationState}`;

  //? ํ† ํฐ๋ฐœ๊ธ‰ => ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์€ code์™€ state๋ฅผ ์ด์šฉํ•ด์„œ ๋„ค์ด๋ฒ„ oauth ์„œ๋ฒ„์—์„œ token ๋ฐ›์•„์˜ค๋Š” ์š”์ฒญ
  const tokenIssuance = await axios //
    .get(naverUrl)
    .catch((err) => console.log(err));

  if (!tokenIssuance.data) {
    console.log("no token issuance data");
    return res.status(401).send({ message: "no code and state" });
  }

  const { access_token } = tokenIssuance.data;

  //? ๋„ค์ด๋ฒ„ oauth ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ token์„ ์ด์šฉํ•ด ๋„ค์ด๋ฒ„ openapi ์„œ๋ฒ„์— ์œ ์ € ์ •๋ณด๋ฅผ ์š”์ฒญ
  const getData = await axios({
    method: "get",
    url: "https://openapi.naver.com/v1/nid/me",
    headers: {
      Authorization: `Bearer ${tokenIssuance.data.access_token}`,
    },
  }).catch((err) => console.log(err));
};

๊ทธ๋ž˜์„œ ์œ„์ฒ˜๋Ÿผ async await์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ˆ ๊ฐ€๋…์„ฑ์ด ๋„ˆ๋ฌด ์ข‹๊ณ  ์ด๋กœ ์ธํ•ด์„œ ๋‚ด๊ฐ€ ํ•„์š”ํ•œ data๋“ค์„ ๋ณ€์ˆ˜์— ๋‹ด์•„ ๋’€๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋นผ์„œ ํ›„์ฒ˜๋ฆฌ ํ•˜๊ธฐ๋„ ํŽธํ–ˆ๋‹ค

์—ฌ๋Ÿฌ ๋ฐฉ์‹์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‘์—ˆ๊ธฐ์— ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค

์•ž์œผ๋กœ๋„ ์–ด๋–ค ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฒ•์ด ๋‹ค์–‘ํ•  ๋•Œ ํ•œ ๊ฐ€์ง€ ๋ฐฉ์‹๋งŒ ๊ณ ์ง‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ ,
๋‹ค์–‘ํ•œ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ๊ธฐ๋กํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ์ฝ”๋“œ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ๊ฒ ๋‹ค.

๋‚ด์ผ์€ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋‚˜์š”?

  • oauth naver ์ฝ”๋“œ api ๋งˆ๋ฌด๋ฆฌ
  • oauth kakao ์ฝ”๋“œ ์‹œ์ž‘ ~ ๋งˆ๋ฌด๋ฆฌ
  • ๋ฐฐํฌํŒŒํŠธ ๊ณต๋ถ€ํ•˜๊ธฐ

'๐Ÿ“ Project - Dev Log' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[โœ๏ธ Project Dev Log] 2022-01-08  (0) 2022.01.08
[โœ๏ธ Project Dev Log] 2022-01-07  (0) 2022.01.08
[โœ๏ธ Project Dev Log] 2022-01-05  (0) 2022.01.06
[โœ๏ธ Project Dev Log] 2022-01-04  (0) 2022.01.04
[โœ๏ธ Project Dev Log] 2022-01-03  (0) 2022.01.04
Comments