개발자의 logs
nodejs 카카오톡 oauth2 소셜로그인 소스코드 (최신) 본문
// 프론트에게서 인가코드를 받는다 post_1
// 서버에서 인가코드를 가지고 카톡에게서 토큰을 받는다.
// 토큰을 클라이언트에게 보낸다.
// 클라이언트가 토큰을 바디에 담아서 다시 post 요청을 한다. post_2
// 백엔드에서 토큰을 가지고 다시 카톡에게 정보를 요청한다.
// 정보를 클라이언트에게 보낸다.
// 클라이언트가 받고 데이터를 파싱해서 다시 보낸다.post_3 // 데이터 파싱문제!!
// 백엔드가 받아서 DB에 저장한다.
const dotenv = require('dotenv');
dotenv.config();
var axios = require('axios');
var request = require('request');
var socialUser = require('../schemas/social_user');
var express = require('express');
var app = express();
var router = express.Router();
var client_id = process.env.YOUR_CLIENT_ID;
var client_secret = process.env.YOUR_CLIENT_SECRET;
var state = 'teamnote';
var redirectURI = encodeURI('이 부분은 본인이 요청하는 redirect url로');
var request = require('request');
router.post('/naver', function (req, res) {
var code = req.body.code;
console.log('code:', code);
var state = 'teamnote';
console.log('state:', state);
api_url =
'https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=' +
client_id +
'&client_secret=' +
client_secret +
'&code=' +
code +
'&state=' +
state;
var options = {
url: api_url,
headers: {
'X-Naver-Client-Id': client_id,
'X-Naver-Client-Secret': client_secret,
},
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.writeHead(200, { 'Content-Type': 'text/json;charset=utf-8' });
res.end(body);
console.log('res:', res);
} else {
res.status(response.statusCode).end();
console.log('error = ' + response.statusCode);
}
});
});
router.post('/member', function (req, res) {
var api_url = 'https://openapi.naver.com/v1/nid/me';
var request = require('request');
var token = req.body.token;
var header = 'Bearer ' + token; // Bearer 다음에 공백 추가
var options = {
url: api_url,
headers: { Authorization: header },
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.writeHead(200, { 'Content-Type': 'text/json;charset=utf-8' });
res.end(body);
} else {
console.log('error');
if (response != null) {
res.status(response.statusCode).end();
console.log('error = ' + response.statusCode);
}
}
});
});
router.post('/parsing', async function (req, res) {
const user_info = req.body;
// console.log(user_info);
// console.log(user_info.user_name);
const userid = user_info.user_id;
const email = user_info.user_email;
const nickname = user_info.user_name;
const double = await socialUser.find({ email });
if (!double) {
const social = new socialUser({ userid, email, nickname });
social.save();
res.send('저장에 성공하였습니다.');
} else {
res.send('이미 있는 유저입니다.');
}
// 예외조건넣기. 유저가 디비에 있으면 저장하지않기.
});
module.exports = router;
'개발 공부지식 > *개발 공부*' 카테고리의 다른 글
<개발공부, 개공> Artillery 부하 테스트 (0) | 2022.07.06 |
---|---|
<개발공부 , 개공> MVC 패턴이란? (0) | 2022.07.05 |
<개발공부, 개공 > TDD란 무엇이고, 그 장점은 무엇인가! (0) | 2022.07.05 |
morgan 미들웨어 사용법 (0) | 2022.07.04 |
<개발공부, 개공> 쿠키와 세션의 정의, 쿠키와 세션의 차이점 (0) | 2022.07.03 |
Comments