代码之家  ›  专栏  ›  技术社区  ›  Ryan Walker

谷歌云功能,createCustomToken在客户端返回null?

  •  0
  • Ryan Walker  · 技术社区  · 2 年前

    我刚开始构建chrome扩展,并尝试在chrome扩展中使用来自Web应用程序的Firebase身份验证

    我想发生的事情:(如果这不是正确的方式,请告诉我)

    1. 用户在webapp中登录/注册

    2. 注册后,调用我的函数 createCustomToken 并将令牌返回给客户端

    3. 将令牌保存到chrome存储中,以便我的扩展可以对用户进行身份验证。

    问题是:

    当我调用函数时,我在控制台中得到的只是 {data: null} 而不是customToken。

    Firestore函数代码

    const {logger} = require("firebase-functions");
    const {onRequest} = require("firebase-functions/v2/https");
    const {onCall, HttpsError} = require("firebase-functions/v2/https");
    const {initializeApp} = require("firebase-admin/app");
    const {getAuth} = require("firebase-admin/auth");
    const {getFirestore} = require("firebase-admin/firestore");
    
    
    initializeApp();
    
    
    exports.createToken = onCall((request) => {
    
      const uid = request.auth.uid;
    
      getAuth().createCustomToken(uid).then((customToken) => {
        return customToken
      })
      .catch((error) => {
        return error;
      });
      
    });
    

    Webapp代码(Next.js)

    // the code below is currently running onClick
    
    const addMessage = () => {
      const createToken = httpsCallable(functions, 'createToken');
      createToken().then(result => {
        console.log(result); >> the result in console is "data: null"
      });
    }   
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Doug Stevenson    2 年前

    您的函数没有向调用者返回任何内容。您需要在顶层使用return语句来返回异步调用链的结果。

      return getAuth().createCustomToken(uid).then((customToken) => {
        return customToken
      })
      .catch((error) => {
        return error;
      });