스토리지

[07.08] Unity 카카오 로그인 구현 1 - 서버를 이용해서 로그인 본문

Node.js

[07.08] Unity 카카오 로그인 구현 1 - 서버를 이용해서 로그인

ljw4104 2021. 7. 8. 15:18
  • 서버 : Node.js + AWS EC2
  • 클라이언트 : Unity
  • 사용 npm패키지 : passport-kakao

카카오 개발자센터에서 앱을 먼저 등록해야함.

* 먼저 검증을 위해서 localhost에서 테스트 진행

app.js 

const express = require("express");
const app = express();
const passport = require("passport");
const KakaoStrategy = require("passport-kakao").Strategy;

let user = {};

passport.use(
  new KakaoStrategy(
    {
      clientID: clientID,
      clientSecret: clientSecret, // clientSecret을 사용하지 않는다면 넘기지 말거나 빈 스트링을 넘길 것
      callbackURL: "http://localhost:3030/auth/kakao/callback",
    },
    (accessToken, refreshToken, profile, done) => {
      let raw = JSON.parse(profile["_raw"]); //문자열을 객체로 parsing
      user.id = raw.id;
      user.nickname = raw.kakao_account.profile.nickname;
      user.profile_image_url = raw.kakao_account.profile.profile_image_url;
      done(null, user);
    }
  )
);

app.get("/auth/kakao", passport.authenticate("kakao", null), (req, res) => {
  console.log("failed");
});

app.get(
  "/auth/kakao/callback",
  passport.authenticate("kakao", (err, user) => {
    console.log(user);
  })
);

app.get("/", (req, res) => {
  res.send("<h1>hello express!!</h1>");
});

app.listen(3030, () => {
  console.log("server is running at 3030 port.");
});

결과값

 

_raw는 텍스트이기에 객체로 변환 후 안의 값을 뽑아내야한다..

_raw 필드

 

* passport-kakao

https://www.npmjs.com/package/passport-kakao

 

passport-kakao

kakao oauth2 login module

www.npmjs.com

 


위에서 저렇게 하면 결과가 console창에만 찍히고 응답이 없다. 하지만 callback 라우터에는 response할 객체가 없다.

그래서 코드수정이 필요하다.

app.get("/auth/kakao/callback", (req, res) => {
  passport.authenticate("kakao", (err, user) => {
    console.log(user);
    const json = JSON.stringify(user);
    res.send(json);
  })(req, res);
});

결과, 위 Console에서 찍히는 값과 일치하다.


* 전체코드

npm init -y
npm i express passport passport-kakao nodemon
const express = require("express");
const app = express();
const passport = require("passport");
const KakaoStrategy = require("passport-kakao").Strategy;

let user = {};

passport.use(
  new KakaoStrategy(
    {
      clientID: "876c53a0c0b1e0ff13917d6cbbe38d11",
      clientSecret: "3pEqq255zsZJGD3lGp9ETtC34xWZ3oyg", // clientSecret을 사용하지 않는다면 넘기지 말거나 빈 스트링을 넘길 것
      callbackURL: "http://localhost:3030/auth/kakao/callback",
    },
    (accessToken, refreshToken, profile, done) => {
      let raw = JSON.parse(profile["_raw"]); //문자열을 객체로 parsing
      user.id = raw.id;
      user.nickname = raw.kakao_account.profile.nickname;
      user.profile_image_url = raw.kakao_account.profile.profile_image_url;
      done(null, user);
    }
  )
);

app.get("/auth/kakao", passport.authenticate("kakao", null), (req, res) => {
  console.log("failed");
});

app.get("/auth/kakao/callback", (req, res) => {
  passport.authenticate("kakao", (err, user) => {
    console.log(user);
    const json = JSON.stringify(user);
    res.send(json);
  })(req, res);
});

app.listen(3030, () => {
  console.log("server is running at 3030 port.");
});
Comments