Nano Hash - криптовалюты, майнинг, программирование

Как показать неавторизованный просмотр по запрошенному URL в Aurelia

Если внутри метода Aurelia canActivate определено, что пользователь не должен иметь возможность просматривать запрошенную страницу. Как показать этому пользователю «Неавторизованную» страницу по URL-адресу, доступ к которому ему запрещен?

Я не хочу возвращать new Redirect("#/unauthorized"), потому что тогда пользователь не может видеть, какой URL-адрес им не разрешено посещать, и у меня есть некоторое состояние панели навигации в URL-адресе, которое будет потеряно.

Примечание. Возможным ответом может быть: «Вы все делаете неправильно». :)


  • Есть ли причина, по которой вы не можете просто сохранить данные из URL-адреса, а затем отобразить эту информацию на неавторизованной странице? Кажется, вы также можете сохранить любое состояние в URL-адресе, чтобы использовать его позже. 16.09.2015
  • У нас есть компоненты панели навигации, которые получают свое состояние из URL-адреса, поэтому мы не хотим менять URL-адрес и терять это состояние панели навигации. Если URL-адрес не меняется, панель навигации сохраняет свое состояние, поэтому пользователь может использовать ее для быстрого перехода с неавторизованной страницы. 16.09.2015
  • Но разве вы не можете изменить его так, чтобы состояние панели навигации было привязано к свойству ViewModel, а не к URL-адресу? Тогда не имеет значения, если URL был изменен. Просто кажется хрупким иметь привязку панели навигации непосредственно к URL-адресу. 17.09.2015
  • Да, но для меня более хрупко поддерживать эту часть состояния в двух местах, потому что тогда они могут рассинхронизироваться. Было бы плохо, если бы URL-адрес говорил, что вы находитесь в компании A, а панель навигации говорила бы, что вы находитесь в компании B. 18.09.2015
  • Хорошо, просто предложение. :) 18.09.2015

Ответы:


1

Вы хотите показать неавторизованную страницу без изменения URL-адреса. Поэтому, если пользователь посещает «/restricted-page» и ему не разрешено ее видеть, покажите неавторизованный шаблон вместо фактической страницы.

Для этого вы можете установить значение шаблона в самой ViewModel из метода canActivate, если пользователь не проходит соответствующие проверки. Затем в getViewStrategy вашей ViewModel вы проверите, было ли установлено это значение, и отобразите это представление, а если нет, то отобразите свое обычное представление.

export class ViewModel {
  viewTemplate = "./view-model.html";

  canActivate(params, routeConfig) {
    if (!canViewPage) {
      this.viewTemplate = "./401-unauthorized.html";
    }
  }

  getViewStrategy() {
    return this.viewTemplate;
  }  
}

Чтобы еще больше упростить это, вы можете просто установить саму функцию getViewStrategy изнутри canActivate.

export class ViewModel {
  canActivate(params, routeConfig) {
    if (!canViewPage) {
      this.getViewStrategy = function() { return "./401-unauthorized.html"; };
    }
  }
}
15.09.2015
  • Я понимаю конвейер авторизации, но наше приложение имеет очень сложные и индивидуальные требования к авторизации. Мы хотим поместить этот материал в каждый метод canActivate, чтобы он не попал в гигантский шаг конвейера. Как я уже сказал, я не хочу перенаправлять. Можете ли вы уточнить, почему все это неправильно? Для чего canActivate, если не для этого? 16.09.2015
  • Извиняюсь. Я слишком быстро прочитал ваш вопрос. Пожалуйста, посмотрите последнее редактирование, которое я добавил. Я считаю, что это можно сделать с помощью getViewStrategy в вашей ViewModel. 16.09.2015
  • В этом конкретном случае вам вообще не понадобится canActivate, потому что это всегда верно. Так что просто реализуйте хук getViewStrategy и выполните условную проверку плюс возврат страницы без аутентификации. 22.09.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..