Всего 125 962 комментария

iWatchYouFromAfar
12 мая 2022, 11:04
0
А что по твоему идеально-безопасный механизм аутентификации пользователя? Тот же twitch.tv использует очень похожу на JWT аутентификацию, записывая и перезаписывая в localStorage разные данные.

JWT это технология, которая дает достаточно стабильный механизм аутентификации. А его доработку и безопасность уже дорабатывай сам. Программа минимум — делать refresh token.

Ну и если за твой сервис возьмуться специалисты, которые занимаются взломом за деньги, то готовься к сложностям.

Еще советую посмотреть видео Ильи Климова про JWT аутентификацию.
iWatchYouFromAfar
12 мая 2022, 10:52
+1
Отвечаю на вопрос про Express. Изучать его и написать на нем пару проектов — маст хев, т.к. это что-то вроде флагмана в мире бекенда на JS, плюс тот же Nest из коробки использует под капотом именно Express. Потыкав пальцем в Express, уже сам поймешь куда тебе двигаться дальше.

Неидеальности Express заключается минимум в его архитектуре, которая с ростом проекта становится сложночитаемой и сложноподдерживаемой. Ты это сам поймешь когда попробуешь сделать нечто большее чем просто блог.
Andrew
12 мая 2022, 10:41
0
Обновили боевой проект?
Александр Мельник
12 мая 2022, 09:41
0
спасибо.
Но в инете много информации по этому вопросу. Странно задавать его здесь.
Но мы ведь с вами как раз и в инете) На сайте который представляет из себя форум, на котором обсуждаются технологии веб разработки и на котором находятся много умных людей, поэтому задать вопрос здесь — мне кажется очень разумным.
Я вот например впервые в жизни слышу про OpenID Connect. И ничего подобного по запросу — межсерверная авторизация мне не попадалось, а вы раз — и подсказали.
Вы правы, я жутко люблю изобретать велосипеды, а не использовать чьи то готовые решения. Понимаю, что в 2022 году это неправильный подход, но ничего поделать не могу. Для меня программирование это прежде всего изобретательство и наслаждение от поиска решения, а когда — установи вот эту библиотеку и скопипасти со стековерфлов такой то код — то это наоборот боль. Но это мои тараканы)
Александр Мельник
12 мая 2022, 09:30
0
nextjs, nestjs,nuxtjs, vuejs — голова кругом идет. Причем я так понимаю что vue это фреймворк языка js, а nuxtjs это уже фреймворк фреймворка vue.
я часто вижу видео по разработки чего либо на nodejs, всегда все разработчики запускают какой либо из веб серверов у себя локально, на каком то доступном порту и разрабатывают. Но я никогда не видел, как это деплоится на продакшен сервер и самое главное, как это там работает?
Поделитесь пожалуйста информацией.
— вы что, на продакшене тоже не используете nginx? Кто именно слушает 80 порт и передает запросы приложению?
— как вообще решается вопрос с размещением нескольких сайтов на одном сервере? Если у апача есть свои вирутальные хосты, у nginx есть понятие server{} и эта настройка тоже содержит hostname и позволяет создать большое количество сайтов на одном сервере, то ничего подобного у того же express я не вижу. Максимум что можно сделать, это запустить несколько «серверов express» на разных портах, но это ведь не сделает их доступными в интернет. Все равно ведь нужно иметь nginx который будет принимать запросы на 80 порту, получать домен и проксировать запрос в зависимости от домена на express. Или я ошибаюсь?
— если все таки nginx действительно не используется, а сервера на продакшине представляют собой запущенный express или nuxt nitro, который сразу слушает 80 порт, то неужели эти программы действительно способны тягаться в безопасности и стабильности с гигантами и давно зарекомендовашими себя apache или nginx? Это сервисы проверенные временем и пользователями, а что такое nuxtjs nitro? Он буквально возник недавно, в документации написано что всего 9 месяцев назад его начали разрабатывать. Что мы можем знать о безопасности этого продукта?
Georg
12 мая 2022, 09:17
0
Спасибо за подсказку, решил поменять CSS на AjaxForm, быстрее и надежнее
Сергей Шлоков
12 мая 2022, 09:06
+1
Изучаю эту технологию и честно говоря, на мой взгляд, это очень небезопасная система.
Web — это вообще небезопасная сфера.

Какую бы документацию не читал, везде встречаю фразу типа — даже если у вас украдут токен, то он позволит пользоваться сервисом не долго.
А если у тебя украдут авторизационную куку?

Не говоря уже о том, что большинство разработчиков не ставят время жизни в 10 минут, а ставят 12 часов а то и больше
Честно говоря, сомневаюсь в твоей оценке. Уверен, есть такие разработчики, но их количество резко сокращается с увеличением опыта. Особенно, когда они узнают про refresh token.

кто то даже хранит их (access token) в базе
Наверно это те же «спецы».

Изобретаю механизм межсерверной аутентификации.
Пополняешь список велосипедостроителей? Есть уже готовые стандарты — OAuth2 и OpenID Connect. Первый — это протокол авторизации. Второй — это надстройка над первым для аутентификации. Он позволяет использовать единый логин (SSO) для сервисов. Для всех языков есть библиотеки.
В id токене ты можешь хранить информацию о пользователе (его id, email или телефон). По нему ты можешь получить пользователя из БД, которого в крайнем случае ты можешь заблокировать. Это один из вариантов.
Кроме того, авторизационный сервер хранит access_token для клиента.

В комментарии всё не опишешь. Но в инете много информации по этому вопросу. Странно задавать его здесь.
Александр Мельник
12 мая 2022, 07:31
0
Господа, раз уж здесь обсуждаются технологии из мира javascript, то хочу услышать ваше мнение и опыт использования jwt токенов как инструмента авторизации?
Изучаю эту технологию и честно говоря, на мой взгляд, это очень небезопасная система.
Плюс вижу, что совершенно каждый разработчик реализует логику работу с jwt по своему, кто то даже хранит их (access token) в базе, хотя по моему это полностью противоречит идее самого токена. Зачем тогда сигнатура в токене, если хранить в базе ассоциацию между пользователем и токеном, это по сути получается механизм сессий с хранением в базе.
Какую бы документацию не читал, везде встречаю фразу типа — даже если у вас украдут токен, то он позволит пользоваться сервисом не долго. Не говоря уже о том, что большинство разработчиков не ставят время жизни в 10 минут, а ставят 12 часов а то и больше, но даже 10 минут хватит, чтобы не спеша и попивая кофе выкачать например всю базу с клиентами. Ничего себе система авторизации и безопасности).

Но это мои и пока теоретические мнения. А есть у кого то реальный и положительный опыт использования токенов именно как инструмента аутентификации? Как применяете его вы? Где храните токены на клиенте? В localstorage? Разбирались ли глубоко

Собственно, почему я, человек далекий (надеюсь что это временно ) от nodejs и стеков типа MEAN, решил вообще изучить jwt. Изобретаю механизм межсерверной аутентификации. Нужно сделать, чтобы человек авторизовавшись в одном сервисе (домене и сервере), перейдя на другой сервис (домен и сервер) сохранил свою аутентификацию и был уже авторизован. Инструмент сессий для этого мало подходит, ну разве что с хранением сессии в общей базе данных, к которой будут иметь доступ все сервисы… В общем буду рад вашим идеям, я то найду и изобрету такой механизм, но чужой опыт — всегда бесценен.
Артур Шевченко
11 мая 2022, 23:35
0
Я бы на странице вывел например , а потом вот тут assets/components/sweetalert2/js/default.js проверял бы значение в meta[name=«pageid»] и в зависимости от этого запускал бы скрипт.
Артур Шевченко
11 мая 2022, 20:17
+1
Я сейчас тебя удивлю, но в родном чанке от minishop2 уже всё за тебя написали.
{foreach $options as $name => $values}
    <div class="form-group row align-items-center">
        <label class="col-6 col-md-3 text-right text-md-left col-form-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label>
        <div class="col-6 col-md-9">
            <select name="options[{$name}]" class="form-control col-md-6" id="option_{$name}">
                {foreach $values as $value}
                    <option value="{$value}">{$value}</option>
                {/foreach}
            </select>
        </div>
    </div>
{/foreach}
Константин
11 мая 2022, 20:02
0
Join убрал, заменил на split
Теперь чанк такой:
<select name="marka" class="no-border jsSelect">
{foreach $options as $option}

            {if $option.value is array}
               <option value="{$option.value | split : ', '}">{$option.value | split  : ', '}</option>
            {else}
                <option value="{$option.value}">{$option.value}</option>
            {/if}
            
{/foreach}
</select>

И выводит, как я уже понял, массив Array: prntscr.com/bBdan3Y7zv1y

Выходит его теперь как-то разобрать foreach menom?
Виноградов Тимур
11 мая 2022, 18:37
0
Всем спасибо за ответы, по итогу заработал такой вариант в .htaccess:
RewriteRule ^en/(.*) /$1 [R=301,NC,L]
Futuris
11 мая 2022, 17:26
0
Спасибо! Буду читать документацию.
Василий Наумкин
11 мая 2022, 17:23
0
Да, свой полноценный сервер со многими фишками — v3.nuxtjs.org/guide/concepts/server-engine/

Работа с БД не зависит от вида сервера — он просто будет выполнять ваш код.
Futuris
11 мая 2022, 17:14
0
Имеется в виду, что у Nuxt собственный сервер, который можно использовать для бэкэнда? И ко всему этому можно «прикрутить» базу данных?
Василий Наумкин
11 мая 2022, 17:06
0
И кстати Express раньше ставился «из коробки» при установке Nuxt, а теперь этого почему-то нет.
Потому что не нужно — у Nuxt есть свой собственный сервер, лучше его и использовать.
Артур Шевченко
11 мая 2022, 16:39
+1
Загляни в чанк посмотри, что там если там join убери, если нет, то используй модификатор split для разбиения строки в массив.
Константин
11 мая 2022, 16:24
0
Получилось вывести, но почему-то значения опций идут через запятую: prnt.sc/tttKEXSIDpZU

Есть ли возможность каждое значение опции отдельным полем в выпадающем списке выводить?
Константин Ильин
11 мая 2022, 16:07
0
Спасибо!
Так и сделал, погуглил седня хорошенько, но только щас увидел ваш комментарий)

Установил стандартный CKEditor из репозитория
Первое что надо сделать — включить codemirorr
Системные настройки->CKEditor
Прописываем настройке ckeditor.extra_plugins значение codemirror

Далее
Открываем файл: manager/assets/components/ckeditor/ckeditor/config.js
Добавляем 
config.startupMode = 'source';

Еще одно действие, но возможно только у меня так, файлы как то кешируются, так что надо в браузере надо открыть manager/assets/components/ckeditor/ckeditor/config.js и обновить.
Убедится, что изменения появились и должно заработать.