Приложение React в веб-приложении Azure (Windows) не читает переменные среды для Auth0

Я развертываю приложение React в веб-приложении Azure. Структура проекта следующая: корень

│
├── server.js
├── package.json
├── package-lock.json
│
└── client
    ├── build
    ├── public
    ├── package.json
    ├── package-lock.json
    └── src
        └── index.js

В файле index.js, расположенном в каталоге src моего приложения React, я пытаюсь настроить Auth0 для аутентификации. Вот соответствующий фрагмент кода:


import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Auth0Provider } from '@auth0/auth0-react';

const domain = process.env.REACT_APP_AUTH0_DOMAIN;
const clientId = process.env.REACT_APP_AUTH0_CLIENT_ID;

if (!domain || !clientId) {
  console.error('Missing Auth0 configuration');
}

ReactDOM.render(
  <React.StrictMode>
    <Auth0Provider
      domain = {domain}
      clientId = {clientId}
      authorizationParams = {{
        redirect_uri: window.location.origin, // Automatically use the current origin
      }}
    >
      <App />
    </Auth0Provider>
  </React.StrictMode>,
  document.getElementById('root')
);

Я настроил переменные среды REACT_APP_AUTH0_DOMAIN и REACT_APP_AUTH0_CLIENT_ID в настройках своего веб-приложения Azure, но мое приложение React не может прочитать эти переменные во время выполнения. В консоли регистрируется ошибка «Отсутствует конфигурация Auth0», указывающая на то, что переменные среды не найдены.

Конфигурация переменных среды: проверено, что переменные среды правильно настроены на портале Azure в разделе «Конфигурация» Службы приложений.

Сборка и развертывание: гарантировали, что приложение React собирается и развертывается правильно, запустив npm run build и затем развернув содержимое папки сборки.

Я ожидаю, что после правильной настройки переменных среды мое приложение React сможет читать эти переменные во время выполнения и правильно настраивать Auth0.

Интересно, что та же проблема существует и при локальном запуске приложения с заданной файловой структурой. Однако локально это решается добавлением дополнительного файла .env в папку клиента. К сожалению, этот подход нельзя применить в Azure, поскольку переменные среды, настроенные на портале Azure, должны быть автоматически доступны приложению во время выполнения.

Приложение React не имеет доступа к какой-либо переменной среды во время выполнения, поскольку это просто статические ресурсы, HTML, CSS, JS и т. д., без какого-либо серверного кода. Все эти конфигурации env применяются только на этапе build.

Sergey Sosunov 13.08.2024 13:55

EikkaPine Можете ли вы предоставить поток журналов для вашей Службы приложений Azure?

Sirra Sneha 13.08.2024 14:07

Как вы развертываете свое приложение в Службе приложений Azure через GitHub или расширение VS Code?

Sirra Sneha 13.08.2024 14:08

@SirraSneha Я развертываю через github с помощью службы сборки службы приложений, и мой поток журналов не предоставляет никакой информации, связанной с проблемой. И, как я уже сказал, я могу решить эту проблему локально, добавив .env в папку клиента, но это не работает в Azure.

EikkaPine 13.08.2024 14:22

Кроме того, server.js, который обрабатывает мои подключения к базе данных, может получать переменные среды Azure, но не index.js в папке клиента! Я делаю здесь что-то не так?

EikkaPine 13.08.2024 14:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я создал пример приложения реагирования, которое печатает переменные среды в качестве вывода.

Спасибо @medium.com за четкое объяснение. Я сослался на этот документ и создал приложение React, используя файл .env.

.env-файл:

REACT_APP_NAME=Sneha
REACT_APP_JOB_TITLE=Engineer
REACT_APP_BRANCH=CSE

приложение.js:

import  React  from  'react';
function  App() {
const  name  =  process.env.REACT_APP_NAME;
const  jobTitle  =  process.env.REACT_APP_JOB_TITLE;
const  branch  =  process.env.REACT_APP_BRANCH;
return (
<div>
<h1>Display Environment Variables</h1>
<p>Name: {name}</p>
<p>Job Title: {jobTitle}</p>
<p> Branch: {branch}</p>
</div>
);
}
export  default  App;

Я развернул приложение в Службе приложений Azure (Windows) с помощью действий GitHub.

файл рабочего процесса:

name: Build and deploy Node.js app to Azure Web App - Reactenv18
on:
  push:
    branches:
      - main
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest  

    steps:
      - uses: actions/checkout@v4

      - name: Set up Node.js version
        uses: actions/setup-node@v3
        with:
          node-version: '20.x'

      - name: Install dependencies
        run: npm install

      - name: Build the React app
        run: npm run build --if-present

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v4
        with:
          name: node-app
          path: .
          retention-days: 1
          max-concurrency: 10  

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    permissions:
      id-token: write  

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v4
        with:
          name: node-app

      - name: Login to Azure
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_<client-id> }}
          tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_<tenant-id> }}
          subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_<subscription-id> }}

      - name: 'Deploy to Azure Web App'
        uses: azure/webapps-deploy@v3
        id: deploy-to-webapp
        with:
          app-name: 'Reactenv18'
          slot-name: 'Production'
          package: .

  • После развертывания приложения в Службе приложений Azure добавьте переменные среды в раздел конфигурации App.

  • В разделе «Конфигурация» Службы приложений Azure перейдите в раздел «Сопоставления путей» и убедитесь, что физический путь правильно настроен и соответствует каталогам развертывания вашего приложения.
site\wwwroot\build

Таким образом, приложение реагирует на использование и загрузку переменных среды как при разработке, так и при производстве.

Вывод после развертывания:

Огромное спасибо за понятное объяснение и пример! Изменение виртуального пути в конфигурации службы приложений Azure решило мою проблему. Я очень ценю вашу помощь!

EikkaPine 14.08.2024 09:02

Я рад, что это сработало!

Sirra Sneha 14.08.2024 09:15

Другие вопросы по теме