This commit is contained in:
PotapovaA 2026-09-02 16:50:12 +03:00
parent a1d4ce0cdd
commit d17e04bd80
6 changed files with 10 additions and 10 deletions

View File

@ -163,10 +163,10 @@ fetch(`${Config.API_URL}/api`, {
# Авторизация фронтенда
По умолчанию фронтенд использует существующую локальную форму входа. Keycloak включается только при точном значении `true` у production-флага:
Фронтенд использует ту же семантику `DEBUG`, что и бэкенд. В production-сборке (`REACT_APP_DEBUG=false`) включается Keycloak:
```dotenv
REACT_APP_IS_PRODUCTION=true
REACT_APP_DEBUG=false
REACT_APP_KEYCLOAK_URL=https://keycloak.example.ru
REACT_APP_REALM=example-realm
REACT_APP_CLIENT_ID=example-client
@ -174,4 +174,4 @@ REACT_APP_NAMESPACE=example-namespace
REACT_APP_APP_NAME=example-app
```
При `REACT_APP_IS_PRODUCTION=false` или если переменная отсутствует, Keycloak не инициализируется и продолжает работать локальная форма входа. Production-авторизация подключается через `raisa-fastapi-protected-web`.
При `REACT_APP_DEBUG=true` Keycloak не инициализируется и продолжает работать локальная форма входа. Production-авторизация подключается через `raisa-fastapi-protected-web`.

View File

@ -170,7 +170,7 @@ const ProductionAuthProvider = ({ children }) => {
};
export const AuthProvider = ({ children }) => {
if (Config.IS_PRODUCTION) {
if (!Config.DEBUG) {
return <ProductionAuthProvider>{children}</ProductionAuthProvider>;
}

View File

@ -57,9 +57,9 @@ export function HeaderMenu() {
<div className='role'>{user?.role}</div>
</UserNameAndRole>
{/* на стенде прода не показываем кнопку выхода */}
{!Config.IS_PRODUCTION && <DownButton onClick={toggleMenu} isOpen={isMenuOpen} />}
{!Config.IS_PRODUCTION && isMenuOpen && (
{/* В debug-режиме доступен выход из локальной учётной записи. */}
{Config.DEBUG && <DownButton onClick={toggleMenu} isOpen={isMenuOpen} />}
{Config.DEBUG && isMenuOpen && (
<DropdownMenu>
<LogoutButton onClick={handleLogout}>Выйти</LogoutButton>
</DropdownMenu>

View File

@ -13,7 +13,7 @@ if (environment.APP_ENV === 'test') {
export class Config {
static API_URL: string = env_var ?? environment.REACT_APP_API_URL ?? environment.REACT_APP_ROOT_PATH ?? '';
static IS_PRODUCTION: boolean = isTrue(environment.REACT_APP_IS_PRODUCTION);
static DEBUG: boolean = isTrue(environment.REACT_APP_DEBUG);
static KEYCLOAK_URL: string = environment.REACT_APP_KEYCLOAK_URL ?? '';
static REALM: string = environment.REACT_APP_REALM ?? '';
static CLIENT_ID: string = environment.REACT_APP_CLIENT_ID ?? '';

2
web/src/env.d.ts vendored
View File

@ -2,7 +2,7 @@
declare namespace NodeJS {
interface ProcessEnv {
readonly REACT_APP_IS_PRODUCTION?: string;
readonly REACT_APP_DEBUG?: string;
readonly REACT_APP_KEYCLOAK_URL?: string;
readonly REACT_APP_REALM?: string;
readonly REACT_APP_CLIENT_ID?: string;

View File

@ -37,7 +37,7 @@ const application = (
</ThemeProvider>
);
const root = Config.IS_PRODUCTION ? (
const root = !Config.DEBUG ? (
<RaisaAuthContext
authClient={createAuthContext(Config.KEYCLOAK_URL, Config.REALM, Config.CLIENT_ID)}
app={{ appName: Config.APP_NAME, namespace: Config.NAMESPACE }}>