Как Gatsby скрывает API-ключи на веб-интерфейсе? - PullRequest
2 голосов
/ 28 марта 2020

Итак, я изо всех сил пытаюсь понять, как работает Гэтсби. Я использую https://www.gatsbyjs.org/starters/AlexanderProd/gatsby-shopify-starter/, который использует плагин Gatsby под названием gatsby-source-shopify. Плагин принимает два параметра: shopName и accessToken. Это выглядит так в gatsby-config.js:

{
  resolve: `gatsby-source-shopify`,
  options: {
    // The domain name of your Shopify shop. This is required.
    shopName: process.env.SHOP_NAME,

    // An API access token to your Shopify shop. This is required.
    accessToken: process.env.SHOPIFY_ACCESS_TOKEN,
  },
},

Будет ли токен доступа доступным для людей, когда я разверну приложение? Нужно ли использовать что-то вроде бессерверных функций, чтобы скрыть мои ключи API, или это нормально. Любое общее объяснение того, как это работает в Гэтсби, было бы замечательно.

Спасибо Гэтсби Фам!

1 Ответ

2 голосов
/ 28 марта 2020

Как показывает код, он использует process.env.SHOP_NAME, где SHOP_NAME - имя переменной окружения . Эти файлы объявлены в root проекта с использованием некоторых имен, таких как .env.domain1.com. В этом файле вы можете сохранить любую нужную переменную для использования в ваших конфигурациях Gatsby. При работе с деликатными переменными (ключами API, токенами, паролями и т. Д. c) рекомендуется использовать этот способ и игнорировать все файлы .env в вашем .gitignore.

Когда вы запускаете команду в Gatsby Вы можете передать ему несколько переменных, например:

"develop": "GATSBY_ACTIVE_ENV=domain1.com gatsby develop"

В этом случае GATSBY_ACTIVE_ENV var будет иметь domain1.com в качестве значения. Затем в вас gataby-config.js, когда вы можете использовать переменные среды (выше module.exports):

require("dotenv").config({
  path: `.env.${process.env.NODE_ENV}`,
})

Затем вы можете создать файл среды, такой как .env.domain1.com, в вашем проекте root и сохраните любую нужную переменную:

SHOP_NAME: 12345

С учетом предоставленного вами кода, если вы запустите команду develop (со всем, что я объяснил), она будет SHOP_NAME равной 12345.

Итак, отвечая на ваш вопрос, у вас не будет доступа к этим токенам. Вам нужно хранить их на вашем локальном компьютере и на вашем сервере развертывания, а не в вашем хранилище . Из документации Gatsby:

Обратите внимание, что вы не должны передавать файлы .env. * В систему контроля версий, а лучше использовать параметры, предоставленные вашим поставщиком непрерывного развертывания (CD) ...

Редактировать : Спасибо @Hans Martin Henken за предоставление следующей статьи о безопасности Гэтсби

...