WedX - журнал о программировании и компьютерных науках

Маршрут на основе политики SailsJS с представлением

Я пытаюсь использовать routes.js для определения маршрута к '/account'.

Я хочу, чтобы тот, кто пытается получить доступ к этому пути, прошел действие UserController и checkLogin, и если проверка безопасности пройдена, пользователь должен отображаться с определенным представлением, которое является home/account

Вот мой код:

маршруты.js:

'/account': {
    controller: 'UserController',
    action: 'checkLogin',
    view: 'home/account'
  }

политики.js:

UserController: {
    '*': 'isAuthenticated',
    'login': true,
    'checkLogin': true
  }

Это позволяет мне просматривать /account без проверки политики isAuthenticated по какой-то причине.

23.01.2014

  • Быстрый вопрос: кажется, вы пытаетесь поместить логику политики в контроллер (судя по звучанию имени, checkLogin — это именно то, что должно быть сделано в политике isAuthenticated), вы изменили эту политику? 23.01.2014

Ответы:


1

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

In config/routes.js:

'/account': 'UserController.account'

In config/policies.js:

UserController: {
  '*': 'isAuthenticated' // will run on all UserController actions
  // or
  'account': 'isAuthenticated' // will run just on account action
}

In api/policies/isAuthenticated.js:

    module.exports = function(req, res, next) {

     // Your auth code here, returning next() if auth passes, otherwise
     // res.forbidden(), or throw error, or redirect, etc.

    }

In api/controllers/UserController.js:

module.exports = {

  account: function(req, res) {

     res.view('home/account');

  }
}
24.01.2014
  • этот «ваш контроллер никогда не будет вызываться, потому что маршрут привязан к представлению» - очень важная часть этого ответа. 06.10.2015

  • 2

    Короче говоря: в одном и том же маршруте в routes.js должна использоваться либо маршрутизация в стиле контроллера/действия, либо в стиле представления, а не оба одновременно.

    Согласно исходному коду маршрутизатора, является свойством view в объекте маршрута, привязка останавливается, поэтому в основном Sails никогда не знает, к какому контроллеру должен быть направлен ваш /account путь, а это означает, что ваша конфигурация политики, специфичная для UserController, никогда не срабатывает.

    Итак, просто удалите свойство view из маршрута, вы всегда можете указать путь просмотра (если хотите нестандартный) с явным рендерингом внутри вашего действия.

    23.01.2014

    3

    Для работы статики с политиками можно задать свой маршрут с контроллером и действием:

    'GET /login': 'AuthController.index',
    

    И установите вид/макет в вашем контроллере:

    index: function (req, res) {
        res.view('auth/login', { layout: 'path/layout' } );
    },
    
    05.08.2015
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]