Как токен ссылки возвращает общедоступный токен? Публичный токен = request.body.publictoken?

avatar
KrystalA
1 июля 2021 в 19:15
123
1
0
  1. Не могли бы вы объяснить, как и где в коде link_token возвращает общедоступный токен?
app.post('/api/create_link_token', async function (request, response) {
  const configs = {
    user: {
      // This should correspond to a unique id for the current user.
      client_user_id: 'user-id',
    },
    client_name: 'Plaid Quickstart',
    products: PLAID_PRODUCTS,
    country_codes: PLAID_COUNTRY_CODES,
    language: 'en',
  };

  if (PLAID_REDIRECT_URI !== '') {
    configs.redirect_uri = PLAID_REDIRECT_URI;
  }

  if (PLAID_ANDROID_PACKAGE_NAME !== '') {
    configs.android_package_name = PLAID_ANDROID_PACKAGE_NAME;
  }
  try {
    const createTokenResponse = await client.linkTokenCreate(configs);
    console.log('Create Token response below')
    prettyPrintResponse(createTokenResponse.data);
    response.json(createTokenResponse.data);
  } catch (error) {
    prettyPrintResponse(error);
    return response.json(formatError(error.response));
  }
});

Согласно Plaid Docs: Конечная точка /link/token/create создает link_token, который требуется в качестве параметра при инициализации Link. После инициализации Link он возвращает public_token, который затем можно обменять на access_token через /item/public_token/exchange в рамках основного потока Link.

  1. Как PUBLIC_TOKEN= request.body.public_token? Как публичный токен попал в request.body?
app.post('/api/set_access_token', async function (request, response, next) {
// Im inquiring about the line right below//
  PUBLIC_TOKEN = request.body.public_token;
  console.log("after", PUBLIC_TOKEN)
  try {
    const tokenResponse = await client.itemPublicTokenExchange({
      public_token: PUBLIC_TOKEN,
    });
    prettyPrintResponse(tokenResponse.data);
    ACCESS_TOKEN = tokenResponse.data.access_token;
    ITEM_ID = tokenResponse.data.item_id;
    response.json({
      access_token: ACCESS_TOKEN,
      item_id: ITEM_ID,
      error: null,
    });
  } catch (error) {
    prettyPrintResponse(error);
    return response.json(formatError(error.response));
  }
});
Источник

Ответы (1)

avatar
Alex
2 июля 2021 в 22:55
0
  1. Токен ссылки возвращается в

response.json(createTokenResponse.data);

В этом коде используется платформа Express. Подробнее об этом можно прочитать здесь: https://masteringjs.io/tutorials/express/json

На стороне клиента createTokenResponse.data принимается как data и из него извлекается link_token:

`          $.post("/api/create_link_token", {}, function (data) {
            ...
            localStorage.setItem("link_token", data.link_token);
            handler = Plaid.create({
              token: data.link_token,

или, в кратком руководстве по React, в интерфейсе/src/App.tsx:

  const generateToken = useCallback(
    async (paymentInitiation) => {
      const path = paymentInitiation
        ? "/api/create_link_token_for_payment"
        : "/api/create_link_token";
      const response = await fetch(path, {
        method: "POST",
      });
      ...
      const data = await response.json();
        ...
        dispatch({ type: "SET_STATE", state: { linkToken: data.link_token } });
      }
      localStorage.setItem("link_token", data.link_token); //to use later for Oauth
    },
    [dispatch]
  );
  1. public_token устанавливается во время вызова /api/set_access/token, здесь:
handler = Plaid.create({
              token: data.link_token,
              onSuccess: function (public_token) {
                $.post(
                  "/api/set_access_token",
                  {
                    public_token: public_token
                  },

Или, если вы используете React Quickstart, этот код находится в

frontend/src/Components/Link/index.tsx:

const onSuccess = React.useCallback(
    (public_token: string) => {
      // send public_token to server
      const setToken = async () => {
        const response = await fetch("/api/set_access_token", {
          method: "POST",
          headers: {
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
          },
          body: `public_token=${public_token}`,
        });