Ошибка типа, "дайджест" неопределенного, в среде разработки

Когда мы строим наш Angular SPA для localhost, он работает отлично.

В нашей среде разработки эта ошибка проникает в консоль DevTool и разбивает все: Ошибка: ошибка (в обещании): Ошибка типа: невозможно прочитать свойство "дайджест" неопределенного

TypeError: Cannot read property 'digest' of undefined
    at N (auth0-spa-js.production.js:1)
    at ie.<anonymous> (auth0-spa-js.production.js:1)
    at Generator.next (<anonymous>)
    at auth0-spa-js.production.js:1
    at new ZoneAwarePromise (zone-evergreen.js:876)
    at t (auth0-spa-js.production.js:1)
    at ie.loginWithRedirect (auth0-spa-js.production.js:1)
    at AuthGuard.<anonymous> (auth.guard.ts:22)
    at Generator.next (<anonymous>)
    at fulfilled (environment.ts:11)
    at resolvePromise (zone-evergreen.js:797)
    at new ZoneAwarePromise (zone-evergreen.js:879)
    at t (auth0-spa-js.production.js:1)
    at ie.loginWithRedirect (auth0-spa-js.production.js:1)
    at AuthGuard.<anonymous> (auth.guard.ts:22)
    at Generator.next (<anonymous>)
    at fulfilled (environment.ts:11)
    at ZoneDelegate.invoke (zone-evergreen.js:359)
    at Object.onInvoke (core.js:34195)
    at ZoneDelegate.invoke (zone-evergreen.js:358)

Я предполагаю, что это должно быть что-то в процессе сборки, какие-то другие флаги, но я не могу понять, какие именно.

3 ответа

Решение

Вероятно, это связано с тем, что ваш dev-сервер настроен как небезопасный источник.

digest скорее всего относится к window.crypto.subtle.digest веб-крипто API. если вы используете браузер на основе Chromium, то, согласно странице проектов Chromium здесь, subtle свойство может быть использовано только в безопасном месте:

Доступ к API WebCrypto ограничен безопасными источниками (то есть https:// pages).

Примечание. В спецификации crypto.subtle должен быть неопределенным в небезопасных контекстах.

Потому что digest это метод subtle, а также subtle является undefined, вы получаете эту ошибку.

Мы получили ту же ошибку при использовании библиотеки auth0-spa-js. Он работал на localhost, а не на нашем промежуточном http-сайте, но хорошо на нашем производственном https-сайте.

Если вы не находитесь в безопасном месте, попробуйте сделать вашу среду разработки безопасной, а затем снова протестировать (самоподписанный сертификат должен подойти). Напоминаем, что безопасные источники:

Какие источники являются "безопасными"?

К защищенным источникам относятся те, которые соответствуют хотя бы одному из следующих шаблонов (схема, хост, порт):

  • (https, *, *)
  • (wss, *, *)
  • (*, localhost, *)
  • (*, 127/8, *)
  • (*,:: 1/128, *)
  • (файл, *, -)
  • (хром-расширение, *, -)

То есть безопасные источники - это источники, которые загружают ресурсы либо с локального компьютера (обязательно доверенного), либо по сети с сервера с криптографической аутентификацией.

Я не уверен, есть ли у команды Auth0 библиотека SPA, которая работает в незащищенном источнике (или планирует включить эту возможность в своей последней библиотеке SPA), но ее собственные библиотеки JS определенно есть.

Angular framework: получение HTTPS путем настройки SSL-сертификата для nginx вашего приложения (nginx.conf или app.conf) решает эту проблему. Назначьте ssl-сертификат и ssl-ключ для своего домена. Обязательно измените свой порт на 443.

Это похоже больше на Angular, чем на Auth0, но из любопытства вы определили digest в твоем компоненте?

Если нет, вы можете сделать это как: digest: {}; на уровне компонентов.

Я надеюсь, что это поможет вам в ваших поисках!

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