Обновление: в основном та же проблема, что и Автономный PWA прерывает вход в систему , но в iOS.
Если вы добавляете веб-приложение на домашний экран, Chrome на Android разделяет локальное хранилище стот же домен в браузере.Вы можете проверить это, перейдя на https://wilfrem.github.io/add_to_homescreen_test/, затем добавив на домашний экран, и увидите, что у вас есть тот же идентификатор при открытии с домашнего экрана.(Я сделал Nexus 5x)
Если вы сделаете то же самое в iOS Safari, вы получите новый идентификатор.(я сделал iPod iOS 12.1.1)
Библиотека oidc-client-js устанавливает ссылку на сеанс в локальном хранилище и затем вызывает его при обратном вызове входа в веб-приложение.Поэтому, если вы попытаетесь войти в систему из веб-приложения, открытого с главного экрана в iOS, он открывает OP (поставщик oidc) в Safari, а затем перенаправляет обратно URL-адрес веб-приложения, но в Safari не открывается веб-приложение, открытое с домашнего экрана,поэтому из-за различий в локальном хранилище вы получаете:
В хранилище не найдено соответствующего состояния
Как вы должны использовать oidc с iOS, открытой из веб-приложения домашнего экранаесли локальное хранилище не используется в одном домене?Или как заставить iOS открыть правильное окно (открытое с главного экрана) при перенаправлении обратно в веб-приложение?Или как заставить iOS никогда не покидать полноэкранное приложение при переходе к OP (провайдеру oidc) в первую очередь?
edit:
Вот описание, объясняющее проблему.
- открыть
my.app.com
- добавить на главный экран
- открыть приложение с домашнего экрана
- нажать кнопку входа
- кнопку входазвонки
UserManager.signinRedirect()
UserManager.signinRedirect()
звонки OidcClient.createSigninRequest()
OidcClient.createSigninRequest()
сохраняет состояние входа в локальное хранилище и переходит к my.op.com
см. на андроиде my.op.com
открывает вкладку Chrome и на iOS my.op.com
открывает Safari - полный процесс входа в систему при операциях
- op перенаправляет на
my.app.com/signin-callback.html
вот в чем проблема
На андроиде my.app.com/signin-callback.html
открывается в приложении, открытом с главного экрана, на iOS оно остается в Safari.Итак, вы получите:
Не найдено подходящего состояния в хранилище
У меня нет проблем с ошибкой, исходя из того, что происходит, ошибка полностью ожидаема, япросто не знаю, как заставить Safari вести себя так, чтобы он работал с библиотекой.
Если это уместно, это мой manifest.json
{
"name": "omitted",
"short_name": "omitted",
"theme_color": "#omitted",
"background_color": "#omitted",
"display": "standalone",
"scope": "/",
"start_url": "/",
"icons": [
{
"src": "omitted",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "omitted",
"sizes": "512x512",
"type": "image/png"
}
]
}
добавить также удалено scope
но без изменений в поведении.
обновление: также попытался установить начало для полного домена, а не только относительного /
, по-прежнему без изменений.