Добавление точки молчания для возобновления входа в React (create-react-app)
У меня есть приложение React, созданное с помощью модуля create-react-app. Я недавно попросил клиента интегрироваться с oidc. Для этой цели я использую redux-oidc, так как у меня уже есть сокращение в моем приложении.
Нам удалось интегрировать мое приложение на свой сервер Identity, и я могу войти в систему и получить токен пользователя, хранящийся в redux. Проблема в том, что я изо всех сил пытаюсь настроить молчание в моем приложении для создания приложения-приложения, поскольку мне нужно добавить дополнительную точку входа. Есть ли способ добавить дополнительную точку входа в silent_renew/index.js
без извлечения приложения create- silent_renew/index.js
-app?
В настоящее время я создал папку с именем silent_renew, содержащую файл index.js
. Эта папка также содержит файл silent_renew.html
с silent_renew.html
количеством (см. Пример приложения, похожего на мою структуру папок).
Ответы
Ответ 1
Поскольку целевая страница для silent_renew является простой HTML-страницей, вы можете обойти веб-пакет. Просто поместите следующий файл в общую папку. Также включите в эту папку копию библиотеки oidc-client.min.js.
общественности /silent_renew.html:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="oidc-client.min.js"></script>
<script>
new Oidc.UserManager().signinSilentCallback().then()
</script>
</body>
</html>
Это работает на моем сайте в конфиге develepment. Для производственного конфига я имею в виду следующее (я еще не тестировал его, но я уверен, что это путь вперед...).
общественные /index.js
const express = require('express')
const path = require('path')
const app = express()
app.use(express.static('.'))
app.use((req, res, next) => {
if (path.extname(req.path).length > 0) {
next()
} else if (path.dirname(req.path).indexOf('silent_renew') > -1) {
req.url = '/silent_renew.html'
next()
}
else if (path.dirname(req.path).indexOf('callback') > -1) {
req.url = '/callback.html'
next()
} else {
req.url = '/index.html'
next()
}
})
app.listen(3000)
Как только приложение create-реакции-приложение поддерживает несколько точек входа (я надеюсь, что это скоро произойдет для сценариев входа в систему предприятия), этот код устареет.
Ответ 2
Вы также можете использовать подход загрузки основного пакета в iframe
и захвата пути, как упомянуто здесь.
Тогда вам не нужно иметь дело с указанием пути для загрузки клиентской oidc-client.min.js
(oidc-client.min.js
или redux-oidc.js
) или redux-oidc.js
его содержимого где-либо.
index.js/ц
import * as React from 'react';
import { render } from 'react-dom';
import { processSilentRenew } from 'redux-oidc';
import App from './App';
if (window.location.pathname === '/silent-renew') {
processSilentRenew();
} else {
render(<App />, document.getElementById('root'));
}
Обратите внимание, что на производительность запроса /silent-renew
могут отрицательно повлиять большие файлы, загружаемые вместе с приложением. Некоторые мысли об этом в комментарии.
Ответ 3
Вы не можете добавить пользовательский загрузчик веб-пакетов, если вы его не выбрали:
Мы не собираемся предоставлять специальные переопределения Webpack, потому что они будут очень хрупкими. Люди начнут в зависимости от конкретных загрузчиков и плагинов, и мы не сможем улучшить общий опыт.
источник: https://github.com/facebookincubator/create-react-app/issues/99#issuecomment-234657710
Если вы хотите добавить новый конкретный файл записи, вам сначала нужно config/webpack.config.dev.js:34
yarn eject
затем отредактировать config/webpack.config.dev.js:34
и config/webpack.config.prod.js:55
. То же самое верно для добавления новых загрузчиков веб-пакетов.
Ответ 4
Как уже говорилось, изменение конфигурации webpack для приложения create-react-app
react create-react-app
будет игнорировать то, что цель этого проекта, предоставляя способ сделать React with zero-configuration.
Я боюсь, что решение будет состоять в том, чтобы выгрузить ваше приложение, которое необратимо.
После этого создайте каталог silent_renew
в корне вашего проекта с помощью index.js
и index.html
, создайте store
для сокращений, как показано здесь (вам, вероятно, не нужно много всего этого, например саги, маршрутизатор и промежуточное программное обеспечение логгера, просто возьмите логику loadUser
и loadUser
хранилище), импортируйте хранилище в файле src/index.js
и создайте Provider
redux, как это.
Затем вы можете изменить config/webpack.config.dev.js
и следовать тому, что мы можем видеть на примере web -packs примера redux - oihc. Добавьте HtmlWebpackPlugin
и CommonsChunkPlugin
для silentRenew
и дополнительную точку входа.
Что немного расстраивает CRA, так это то, что их настройка webpack для dev и prod полностью разделена и не распространяется на общий. Вам нужно будет выполнить эту операцию как в конфигурациях prod, так и в dev, или расширить один другой файл conf, чтобы предотвратить избыточность, например, такую как.
Я бы также посоветовал вам использовать еще один простой эшафот, CRA хорош, когда у вас нет ничего особенного в отличие от того, что вы хотите (и, вероятно, больше в будущем). Извлечение создаст много файлов и кода, которые вам даже не нужны в вашей собственной кодовой базе. Мы с подругой сделали минималистский, но я уверен, что есть много лучших альтернатив.