reactjs 无法从静态Web应用程序读取配置值

fquxozlt  于 2023-03-22  发布在  React
关注(0)|答案(2)|浏览(163)

我在Azure中部署了一个静态Web应用程序,配置设置如下:

我有以下authConfig.ts:

import { Configuration } from "@azure/msal-browser";

// Config object to be passed to Msal on creation
export const msalConfig: Configuration = {
    auth: {
        clientId: `${process.env["REACT_APP_AAD_UI_APP_CLIENT_ID"]}`,
        authority: `https://login.microsoftonline.com/${process.env["REACT_APP_AAD_APP_TENANT_ID"]}`,
        redirectUri: "/",
        postLogoutRedirectUri: "/"
    }
};

// scopes
export const loginRequest = {
    scopes: [`api://${process.env["REACT_APP_AAD_API_APP_CLIENT_ID"]}/user_impersonation`]
  };

// endpoints 
export const config = {
    endpoint: `${process.env["REACT_APP_AAD_APP_SERVICE_BASE_URI"]}/api/v1/items`
};

在部署后运行此命令时,我看到以下错误:

似乎没有从配置中阅读tenantId。请求URL应该是
https://login.microsoftonline.com/tenant-id/v2.0/.well-known/openid-configuration
在我添加了.env文件和以下值后,它运行得很好:

REACT_APP_AAD_UI_APP_CLIENT_ID= 'xxxx'
    REACT_APP_AAD_API_APP_CLIENT_ID= 'yyyy'
    REACT_APP_AAD_APP_TENANT_ID= 'abcd'
    REACT_APP_AAD_APP_SERVICE_BASE_URI= 'https://xxx.api.azurewebsites.net'

我错过了什么?

hsvhsicv

hsvhsicv1#

process对象在node.js环境中可用。您无法从浏览器控制台访问它。但是,您可以将其记录在代码中,以便在应用程序在node.js上下文中运行时检查日志。
当你添加.env文件时,它开始在本地运行,因为node.js应用在其引导过程中加载了它,并使变量可用。在Azure服务器上运行构建的代码时,如果你没有在node.js上下文中运行它,那么你需要执行以下操作。
你需要有一个源来获取它。在构建时,你需要将.env文件中的值转换为部署包中包含的config.json或yaml文件。在代码中,你读取这个文件并将值合并到配置对象中。但是,请注意,当阅读这个文件时,配置值将被暴露。
如果您在Azure服务器上的node.js上下文中运行它,则需要包含.env文件。这不会暴露您的配置值。
另一种方法是从运行应用程序的容器中提供配置值-假设您有一个Web应用程序,并且您的react应用程序正在其上下文中运行,然后您可以将配置提升到全局窗口对象中并使用它。假设您将其加载到window.appname.config中并从那里读取它。
希望这个有用。

kcugc4gi

kcugc4gi2#

import { Configuration } from "@azure/msal-browser";

// Config object to be passed to Msal on creation
export const msalConfig: Configuration = {
    auth: {
        clientId: `${process.env.REACT_APP_AAD_UI_APP_CLIENT_ID}`,
        authority: `https://login.microsoftonline.com/${process.env.REACT_APP_AAD_APP_TENANT_ID}`,
        redirectUri: "/",
        postLogoutRedirectUri: "/"
    }
};

// scopes
export const loginRequest = {
    scopes: [`api://${process.env.REACT_APP_AAD_API_APP_CLIENT_ID}/user_impersonation`]
  };

// endpoints 
export const config = {
    endpoint: `${process.env.REACT_APP_AAD_APP_SERVICE_BASE_URI}/api/v1/items`
};

相关问题