Home > Net >  "Cannot read property 'uid' of undefined" error - Plaid link token
"Cannot read property 'uid' of undefined" error - Plaid link token

Time:12-11

I'm getting a "Cannot read property 'uid' of undefined" when trying to create a plaid token....I have spent like 3 days trying to make it work.

does anybody knows how to fix it?

enter image description here Cloud function to get Plaid token

//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
      );
    });
});

swift function

    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)
        }
    }

CodePudding user response:

The only .uid in your code is in this line:

const customerId = context.auth.uid;

So it seems like context.auth is undefined. In the Cloud Functions code you can handle this with:

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;
  ...

The new code here comes from the Firebase documentation on handling errors in callable Cloud Functions.

You'll also want to check if the user is signed in in your Swift code.

  • Related