일단 공식 문서에서 제공해주는 소스 기반으로 작성
const { authenticator } = require('otplib');
const QRCODE = require('qrcode');
// otp 인증 페이지로 이동
function getOTPQRimg(Context,response){
beautyPrint('getOTPQRimg----------------------',Context);
// generate QR code
const generateQRCodePromise = (secret) => {
let url = authenticator.keyuri('email@gmail.com','testotp',secret)
return new Promise((resolve, reject) => {
QRCODE.toDataURL(url, (err, imageUrl) => {
if (err) {
reject(err);
} else {
resolve(imageUrl);
}
});
});
};
const secret = authenticator.generateSecret();
//const otpauthUrl = authenticator.keyuri('user@example.com', 'My Service', secret);
OTPsecretMap[Context.USERID]=secret;
(async function(){
try {
let qurimg = await generateQRCodePromise(secret);
response.end(qurimg);
} catch (err) {
console.error(err);
response.end(err);
}
})();
}
function checkOTPval(Context,response){
var pass = Context.pass;
var userid = Context.USERID;
console.log('checkOTPval',pass,OTPsecretMap,(OTPsecretMap[userid]))
secret=OTPsecretMap[userid];
if(!OTPsecretMap[userid]){
response.end('noid');
}
else {
console.log('checkOTPval2')
let verified = authenticator.verify({ token: pass,secret});
console.log('checkOTPval',verified)
response.end(JSON.stringify(verified));
}
}