Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (10)
  • Yii 2 checkboxList в колонку?

    @izheme
    Познаю мир
    Для тех, кто еще сталкивается с подобным. Проверьте, что вы используете yii\bootstrap\ActiveForm, а не yii\widgets\ActiveForm

    Тот же gii по стандартным шаблонам генерирует с использованием yii\widgets\ActiveForm
    Ответ написан
    Комментировать
  • Как с помощью Cypress отследить запрос на сервер ??

    @izheme
    Познаю мир
    Например, вот так:
    it('Request', () => {
        cy.server()
        cy.route("POST", '/oauth/token').as('getToken')
    
        cy.get(['data-cy="button-get-token"]').click()
    
        cy.wait('@getToken').its('status').should('eq', 200)
      })
    Ответ написан
    Комментировать
  • Как определить окончание работы ряда Job задач в laravel?

    @izheme
    Познаю мир
    Ну а какие варианты? Фронт где-то далеко в системе клиент-сервер. Если фронт закончил запрос к серверу, то для него, что очередь там, что не очередь. Т.е. в вопросе два момента:
    1. Как фронт получает обновление статуса: либо обращается к нужному ендпоинту, либо поднимает веб-сокет соединение и слушает.
    2. Как бэкенд понимает, что Job готов. Насколько я помню, в Laravel есть события для этого. Дальнейшая реализация обработки событий зависит от того, как фронт "слушает" изменения - выставляешь ты флаг для ендпоинта или отправляешь событие в сокет.
    Ответ написан
    4 комментария
  • Какие проблемы прямой вставки кода виджета в код стороннего сайта?

    @izheme Автор вопроса
    Познаю мир
    Еще раз благодарю всех принявшим участие в дискуссии. Наконец-то смог найти немного времени и написать небольшой обобщающий материал, может кому-то пригодится.

    Итак, ситуация. Вам необходимо сделать возможность вставки своих виджетов в код сторонних сайтов. Для реализации этого сторонний сайт вставляет в свой код ваш JS-код. Далее ваш JS код вставляет виджет. Виджет можно вставить либо прямо в код страницы (далее прямая вставка в DOM) либо создать Iframe. Рассмотрим потенциальные проблемы обоих подходов.

    JS конфликты
    Прямая вставка в DOM
    Здесь не должно быть конфликтов, когда используется “пространство имен”. Но при использовании сторонних библиотек, некоторые из них могут обращаться напрямую к window и это невозможно контролировать. Я столкнулся с проблемой когда vuetify обращается к window.$vue из своего кода и просто падает.

    Iframe
    Полная инкапсуляция, конфликты исключены

    CSS конфликты
    Прямая вставка в DOM
    Потенциально очень серьёзные конфликты. Код внешнего сайта влияет на виджет, код виджета влияет на внешний сайт. Ваш виджет ломает внешний сайт, внешний сайт ломает ваш виджет.

    Iframe
    Полная инкапсуляция, конфликты исключены

    Cookies (описанное ниже так же относится и к localStorage)
    Если необходимо отправлять ваши кукисы из виджета

    Прямая вставка в DOM
    Мы не можем отправлять кукисы третьей-стороны из JS. Если использовать для отправки кукиса заголовки с сервера во время загрузки статики или скрытый iframe, то браузер будет опознавать их как кукисы третьей стороны. По современным оценкам кукисы третьей стороны отключены у 25-50% пользователей. И тренд такой, что это число будет только расти.

    Iframe
    Мы можем устанавливать свои кукисы, как кукисы первой стороны. Возможно, для некоторых браузеров, потребуется выполнить POST запрос для одобрения установки кукисов.

    Безопасность
    Прямая вставка в DOM
    Если ваш виджет должен общаться с вашим сервером, то прямая вставка - это полный провал в безопасности. Для возможности выполнения запросов вам необходимо будет включить CORS (отключить same-origin policy). Это приведет к тому, что уязвимость, позволяющая исполнять код на внешнем сайте, позволит злоумышленнику отправлять запросы на ваш сервер от чужого имени, при стечении обстоятельств.

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

    Iframe
    Продолжаем использовать same-origin policy. Данные виджета изолированы.

    Заключение: единственный адекватный вариант - вставка через iframe.

    P.S. Тимлида я обыграл. Но меня поражает: как люди с такими познаниями становятся тимлидами с зп >700к (это не Россия, но все равно дофига)?!
    Ответ написан
    Комментировать
  • Как сделать select на двухуровневом with?

    @izheme
    Познаю мир
    Как уже верно отметили, надо не забывать про id в вашей связи. Ещё можно сделать динамически. В Laravel 5.5 и выше, можно попробовать сделать так:

    \Request::user()->tickets()->with('messages.user:id,name,surname')->find($id);


    Ну или типа такого:
    \Request::user()->tickets()->with(['messages.user'=>function($query){
            $query->select('id', 'name', 'surname');
        }])->get();


    P.S. Возможно, во всех случаях надо from_id возвращать, чтобы связь смогла разрешится. Попробовать надо.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (8)