“无法读取未定义的属性 'uid'”错误 - 格子链接令牌

Posted

技术标签:

【中文标题】“无法读取未定义的属性 \'uid\'”错误 - 格子链接令牌【英文标题】:"Cannot read property 'uid' of undefined" error - Plaid link token“无法读取未定义的属性 'uid'”错误 - 格子链接令牌 【发布时间】:2022-01-15 14:55:56 【问题描述】:

我在尝试创建格子标记时收到“无法读取未定义的属性 'uid'”...。我花了大约 3 天的时间试图让它工作。

有人知道如何解决吗?

获取Plaid令牌的云函数

//PLAID - create link Token plaid Nat
const plaid = require("plaid");

exports.createPlaidLinkToken = functions.https.onCall(async (data, context) => 
  const customerId = context.auth.uid;

  const plaidClient = new plaid.Client(
    clientID: functions.config().plaid.client_id,
    secret: functions.config().plaid.secret,
    env: plaid.environments.development,
    options: 
      version: "2019-05-29",
    ,
  );

  return plaidClient.createLinkToken(
      user: 
        client_user_id: customerId,
      ,
      client_name: "Reny",
      products: ["auth"],
      country_codes: ["US"],
      language: "en",
    )
    .then((apiResponse) => 
      const linkToken = apiResponse.link_token;
      return linkToken;
    )
    .catch((err) => 
      console.log(err);
      throw new functions.https.HttpsError(
        "internal",
        " Unable to create plaid link token: " + err
      );
    );
);

快捷功能

    class func createLinkToken(completion: @escaping (String?) -> ())
        //this is the firebase function
        Functions.functions().httpsCallable("createPlaidLinkToken").call  (result, error) in
            if let error = error 
                debugPrint(error.localizedDescription)
                return completion(nil)
            
            guard let linkToken = result?.data as? String else 
                return completion(nil)
            
            completion(linkToken)
        
    

【问题讨论】:

【参考方案1】:

您的代码中唯一的.uid 位于这一行:

const customerId = context.auth.uid;

所以看起来context.authundefined。在 Cloud Functions 代码中,您可以使用以下方法处理此问题:

exports.createPlaidLinkToken = functions.https.onCall(async (data, context) => 
  // Checking that the user is authenticated.
  if (!context.auth) 
    // Throwing an HttpsError so that the client gets the error details.
    throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' +
      'while authenticated.');
  

  const customerId = context.auth.uid;
  ...

此处的新代码来自 handling errors in callable Cloud Functions 上的 Firebase 文档。

您还需要在 Swift 代码中使用 check if the user is signed in。

【讨论】:

太尴尬了,你的回答让我意识到我一直在测试,但用户没有经过身份验证哈哈。我通过了身份验证,并且能够传递该错误,现在我收到“未处理的错误 TypeError:无法读取未定义的属性‘开发’”,但我想这与环境有关,我明天可以调试它。谢谢!

以上是关于“无法读取未定义的属性 'uid'”错误 - 格子链接令牌的主要内容,如果未能解决你的问题,请参考以下文章

带有格子 + 条纹 Api 的错误代码 2002

Stripe 返回“没有这样的令牌”错误(格子集成)

格子 Oauth redirect_uri 未配置错误

格子开发重定向uri?

格子达为啥上传文件是空的

格子 - 错误代码:'ITEM_LOGIN_REQUIRED'。每隔一小时左右重复一次