-
Notifications
You must be signed in to change notification settings - Fork 2
/
server.js
92 lines (81 loc) · 2.79 KB
/
server.js
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const express = require("express");
const app = express();
const nunjucks = require("nunjucks");
const axios = require("axios");
const qs = require("qs");
const session = require("express-session");
// Express 애플리케이션 설정
app.set("view engine", "html");
nunjucks.configure("views", {
express: app,
});
// Express 세션 설정
app.use(
session({
secret: "ras", // 세션 암호화를 위한 비밀키
resave: true, // 세션 변경 사항이 없어도 다시 저장할지 여부
secure: false, // 개발 환경에서는 false로 설정 (HTTPS가 아닌 환경에서도 사용 가능)
saveUninitialized: false, // 초기화되지 않은 세션을 저장할지 여부
})
);
// 카카오 API 정보
const kakao = {
clientID: "카카오 클라이언트 ID", // 카카오 클라이언트 ID
clientSecret: "카카오 클라이언트 시크릿", // 카카오 클라이언트 시크릿
redirectUri: "카카오 로그인 후 리다이렉션할 URL", // 카카오 로그인 후 리다이렉션할 URL
};
// 카카오 로그인 시작 라우트
app.get("/auth/kakao", (req, res) => {
const kakaoAuthURL = `https://kauth.kakao.com/oauth/authorize?client_id=${kakao.clientID}&redirect_uri=${kakao.redirectUri}&response_type=code&scope=profile,account_email`;
res.redirect(kakaoAuthURL); // 카카오 로그인 페이지로 리다이렉션
});
// 카카오 로그인 콜백 라우트
app.get("/auth/kakao/callback", async (req, res) => {
try {
// 카카오로부터 받은 인증 코드로부터 액세스 토큰을 얻기 위한 요청
const token = await axios({
method: "POST",
url: "https://kauth.kakao.com/oauth/token",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
data: qs.stringify({
grant_type: "authorization_code",
client_id: kakao.clientID,
client_secret: kakao.clientSecret,
redirectUri: kakao.redirectUri,
code: req.query.code,
}),
});
// 액세스 토큰을 사용하여 사용자 정보를 얻기 위한 요청
const user = await axios({
method: "get",
url: "https://kapi.kakao.com/v2/user/me",
headers: {
Authorization: `Bearer ${token.data.access_token}`,
},
});
// 사용자 정보를 세션에 저장
req.session.kakao = user.data;
} catch (e) {
console.error("사용자 정보 가져오기 오류:", e);
res.json(e.data);
}
res.send("success");
});
// 사용자 정보 페이지
app.get("/auth/info", (req, res) => {
let { nickname, profile_image } = req.session.kakao.properties;
res.render("info", {
nickname,
profile_image,
});
});
// 홈 페이지
app.get("/", (req, res) => {
res.render("index");
});
// 서버 리스닝
app.listen(3000, () => {
console.log(`server start 3000`);
});