Fluth+Firebaseクラウド機能による認証


アプリを開発している学費専門家が遅々として削っているバカコリン.
開発=fluf+firebaseとvscodeのlibフォルダ
これが開発したすべてのコリンバカだ
サーバ上での支払検証などもクライアントコードで検証する必要があります.
チャット通知では、バックエンドは最終的にお客様のニーズに依存します.
でも.
cloud functions?? CLI???? これはいったい何の言語ですか.index.js??? libフォルダじゃないの?どうすればいいの???
久しぶりに文盲の状態から抜け出したので、
高壁のcloud functionsコードを共有することにしました.
理由は私が検索した時も私のような初心者たちをたくさん助けてくれたからです.
よくわかりませんが、髪の毛が白いので検索しにくいです.
プロセス全体は次のとおりです.
アプリケーションリクエスト->本人検証後->コールバック実行者->導入サーバから経験書の電話番号を取得->Fire Storeで会員加入確認->会員登録ページへ
粗加工手順のコード.
(https://dev-in-seoul.tistory.com/9?category=462550ブログをたくさん見てください.見つけてとても助かりました.ありがとうございます.Heartも注文しました.)
phoneCertification.js


const functions = require("firebase-functions");
const admin = require('firebase-admin');
const express = require('express');
const axios = require('axios');
const cors = require('cors');
const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.json()); 
app.use(cors({ origin: true })); 

const db = admin.firestore(); 

app.post("/", async (req, res) => {
    try {
        const newData = req.body;
        const {imp_uid} = newData;

    //*==================== 아임포트 서버에 인증내역 조회 후 데이터 얻음 ====================
        // 액세스 토큰(access token) 발급 받기(아임포트 서버와 통신하기 위한 엑세스 토큰.)
        const getToken = await axios({
        url: "https://api.iamport.kr/users/getToken",
        method: "POST", // POST method
        headers: { "Content-Type": "application/json" },
        data: {
          imp_key: "key"
          imp_secret: "secret"
           
        },
      });
        const { access_token } = getToken.data.response; // 인증 토큰 확보
        functions.logger.log(`getToken Success: ${access_token}`);

        //비교 검증을 위해 IMP 서버로 들어온 인증데이터 조회
        const getCertificateData = await axios({
        url: `https://api.iamport.kr/certifications/${imp_uid}`, //주문번호 입력
        method: "GET", 
        headers: { "Authorization": access_token }, // 인증 토큰 Authorization header에 추가
      }).catch(err => {
        functions.logger.error(err);
      });

        const certificationInfo = getCertificateData.data.response; // 조회한 인증 정보
        const {phone, name} = certificationInfo;
        functions.logger.log(`phone: ${phone}`);

//*==================== Firestore에 데이터 조회 ====================
        let docListGet = await db.collection("Users").where("PhoneNumber", "==", phone).get();
        let docList = docListGet.docs;

        if (docList.length>0) {
            const email = docList[0].data().Email;
            functions.logger.info("가입된 번호 있음");
            res.send(JSON.stringify({ status: "number-exist", message: `${email}로 가입된 번호가 존재해요.`})); 
        } else {
            functions.logger.info("가입된 번호 없음");
            paidSendMsg = res.status(200).send(JSON.stringify({ status: "number-no-exist", message: `${phone}는 가입가능한 번호예요!`,phone: phone, name: name}));
        }
    }
    catch (e)  {
        functions.logger.error(`error: ${e}`);
        res.status(400).send(JSON.stringify({ status: "Error", message: `진행 중 에러가 발생했어요!\n${e}`}));
    }

});

exports.phoneCertificate = functions.region("asia-northeast3").https.onRequest(app);
index.js

const phoneCertificate = require("./iamportCertificate");
exports.phoneCertificate = phoneCertificate.phoneCertificate;