One-Time-Password를 구현하기 위해 firebase를 deploy하는 도중 username이 undefined로 인식되는 에러가 발생했다.
otp>functions>twilio.js
const twilio = require('twilio');
require('dotenv').config();
const accoutSid = process.env.ACCOUNTSID;
const authToken = process.env.AUTHTOKEN;
module.exports = new twilio.Twilio(accoutSid, authToken);
c:\Users\user\momo\wellwork\otp\functions>node twilio.js
undefined undefined undefined
c:\Users\user\momo\wellwork\otp\functions\node_modules\twilio\lib\rest\Twilio.js:132
throw new Error('username is required');
^
Error: username is required
at new Twilio (c:\Users\user\momo\wellwork\otp\functions\node_modules\twilio\lib\rest\Twilio.js:132:11)
at Object.<anonymous> (c:\Users\user\momo\wellwork\otp\functions\twilio.js:7:18)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
구글링 결과 .env파일을 root directory에 두지 않을 때 undefined에러가 발생하는 경우가 있다고 한다.
otp>functions 안으로 .env파일을 옮겼더니 문제가 해결되었다.
다시 deploy를 했을 때 이번에는 HTTP Error: 403, Unknown Error가 발생했다.
c:\Users\user\momo\wellwork\otp\functions>firebase deploy --project one-time-password-24b66
! functions: package.json indicates an outdated version of firebase-functions.
Please upgrade using npm install --save firebase-functions@latest in your functions directory.
=== Deploying to 'one-time-password-24b66'...
i deploying functions
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
+ functions: required API cloudbuild.googleapis.com is enabled
+ functions: required API cloudfunctions.googleapis.com is enabled
i functions: preparing functions directory for uploading...
i functions: packaged functions (39.02 KB) for uploading
! functions: Upload Error: HTTP Error: 403, Unknown Error
Error: HTTP Error: 403, Unknown Error
firebase CLI를
firebase logout
한 뒤
firebase login
를 하니 간단하게 해결되었다. 바뀐 값을 인식하지 못해서 문제가 발생했던 듯 하다.
c:\Users\user\momo\wellwork\otp\functions>firebase deploy --project one-time-password-24b66
! functions: package.json indicates an outdated version of firebase-functions.
Please upgrade using npm install --save firebase-functions@latest in your functions directory.
=== Deploying to 'one-time-password-24b66'...
i deploying functions
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
+ functions: required API cloudbuild.googleapis.com is enabled
+ functions: required API cloudfunctions.googleapis.com is enabled
i functions: preparing functions directory for uploading...
i functions: packaged functions (39.02 KB) for uploading
+ functions: functions folder uploaded successfully
i functions: creating Node.js 12 function createUser(us-central1)...
+ functions[createUser(us-central1)]: Successful create operation.
+ Deploy complete!
Project Console: https://console.firebase.google.com/project/one-time-password-24b66/overview
deploy를 하면 다음과 같이 create user가 firebase에 생성된다.
참고로 otp과정은 다음과 같은 로직으로 진행된다.
postman을 통해 먼저 create user를 요청해 user정보를 생성하고
request user를 요청해 해당 user가 존재하는지 확인한 후
twilio를 이용해 다음의 인증 코드를 문자로 보내고
user가 알맞는 코드로 응답하면 token을 발급한다.
ps. 해당 코드는 저의 firebase-otp 깃헙 repo에서 확인할 수 있습니다.