반응형
콘솔로 이동한다.
헤더의 경우 access key가 일단 필요해보인다.
클라우드 포탈 - 마이페이지 - 계정관리 - 인증키관리 - Acess Key ID
우리가 알아놔야 할 것은,
포탈에서의 인증키 관리 부분의
'Access Key'와 'Secret Key' 값이다
잘 정리해두자.
이제 보니 헤더 id는 찾았고,
경로변수에 들어갈 서비스 아이디를 가져와야 한다.
SENS(Simple Easy Notification Service)에 들어왔다면
'프로젝트 생성하기'를 눌러준다.
원하는 프로젝트를 선정 후 생성해준다.
나는 문자를 보낼 거라서 하나만 체크해줬다.
프로젝트 - 서비스 ID 키 아이콘 을 클릭하면
서비스ID를 확인할 수 있다.
이제 번호를 보낼
발신번호를 등록해준다.
이제 코드 수정을 해주고,
request를 보내보면 문자 발송이 잘 된다.
route 부분
userRoute.js
app.post('/send', user.send);
app.post('/verify', user.verify);
userController.js
const app = require('express').Router();
const axios = require('axios');
const Cache = require('memory-cache');
const request = require('request');
const CryptoJS = require('crypto-js');
const NCP_serviceID = '[[서비스 아이디]]';
const NCP_accessKey = '[[액세스 키]]';
const NCP_secretKey = '[[포털에 있던 비밀키]]';
const date = Date.now().toString();
const uri = NCP_serviceID;
const secretKey = NCP_secretKey;
const accessKey = NCP_accessKey;
const method = 'POST';
const space = " ";
const newLine = "\n";
const url = `https://sens.apigw.ntruss.com/sms/v2/services/${uri}/messages`;
const url2 = `/sms/v2/services/${uri}/messages`;
const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
hmac.update(method);
hmac.update(space);
hmac.update(url2);
hmac.update(newLine);
hmac.update(date);
hmac.update(newLine);
hmac.update(accessKey);
const hash = hmac.finalize();
const signature = hash.toString(CryptoJS.enc.Base64);
exports.send = async function (req, res) {
const phoneNumber = req.body.phoneNumber;
Cache.del(phoneNumber);
//인증번호 생성
const verifyCode = Math.floor(Math.random() * (999999 - 100000)) + 100000;
Cache.put(phoneNumber, verifyCode.toString());
axios({
method: method,
json: true,
url: url,
headers: {
'Content-Type': 'application/json',
'x-ncp-iam-access-key': accessKey,
'x-ncp-apigw-timestamp': date,
'x-ncp-apigw-signature-v2': signature,
},
data: {
type: 'SMS',
contentType: 'COMM',
countryCode: '82',
from: '01033543945',
content: `[본인 확인] 인증번호 [${verifyCode}]를 입력해주세요.`,
messages: [
{
to: `${phoneNumber}`,
},
],
},
// function(err, res, html) {
// if(err) console.log(err);
// else {
// resultCode = 200;
// console.log(html);
// }
})
.then(function (res) {
console.log('response',res.data, res['data']);
res.json({isSuccess: true, code: 202, message: "본인인증 문자 발송 성공", result: res.data });
})
.catch((err) => {
console.log(err.res);
if(err.res == undefined){
res.json({isSuccess: true, code: 200, message: "본인인증 문자 발송 성공", result: res.data });
}
else res.json({isSuccess: true, code: 204, message: "본인인증 문자 발송에 문제가 있습니다.", result: err.res });
});
};
exports.verify = async function (req, res) {
const phoneNumber = req.body.phoneNumber;
const verifyCode = req.body.verifyCode;
const CacheData = Cache.get(phoneNumber);
if (!CacheData) {
return res.send('fail');
} else if (CacheData !== verifyCode) {
return res.send('fail');
} else {
Cache.del(phoneNumber);
return res.send('success');
}
};
반응형
'백엔드' 카테고리의 다른 글
intellij 연동하여 ec2서버 소스 수정하기 (0) | 2021.02.16 |
---|---|
[AWS ec2]RDS구축 및 Intellij를 통해 연동 (0) | 2021.02.14 |
[AWS EC2]서브도메인 연결 (0) | 2021.02.11 |
[AWS EC2]IP를 도메인으로 바꾸기 (0) | 2021.02.10 |
[ubuntu]nginx let's encrypt로 https적용 (0) | 2021.02.08 |