• Зачем в состав JWT входит открытый payload?

    Отерытый payload нужен для двух вещей:
    1. Чтобы клиент мог получить всякую информацию о токене не делая запросы к серверу.
    2. Чтобы сервер мог работать не делая лишние запросы к серверу авторизации или к БД.

    Для проверки подлинности есть подпись
    Ответ написан
    3 комментария
  • Почему на одних сервисах просят сначала email, а потом пароль, а на других сразу оба?

    @Flying
    По-моему всё началось c Google, который действительно применяет разную логику в зависимости от того, какой email введён и поэтому ему важно разделять ввод email и пароля.

    Другие сервисы в основном просто тупо копируют без реальной необходимости, потому что "ну вот Google (или кто-то ещё большой) же так делает, значит так надо". Вплоть до того, что форма по факту одна, просто на JavaScript скрывают поле и показывают после первого submit'а.

    Другими словами в большинстве случаев - карго-культ и "следование моде" без реальной потребности. Конечно, есть сценарии при которых это действительно нужно, но их меньшинство.

    Кстати, дополнительно, подобный подход ещё и ломает ввод логина / пароля из менеджеров паролей.
    Ответ написан
    3 комментария
  • Почему на одних сервисах просят сначала email, а потом пароль, а на других сразу оба?

    @xfg
    Началось всё с того, что помимо стандартной формы входа на сайт также стали появляться кнопки входа через социальные сети. Например вы зарегистрировались на целевом сайте используя свой аккаунт на твиттере. Затем какое-то время не пользовались целевым сайтом, после чего вернулись и... Вы точно помните что у вас уже есть аккаунт на данном сайте, но вы не помните какой способ входа вы использовали. Перед вами с десяток различных кнопок. Какую из них нажимать? Думаю, история знакомая многим.

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

    Таким образом это ничто иное как улучшение взаимодействия с пользователем. Но как и всё в мире имеет определенные недостатки. Например теперь можно узнать зарегистрирован ли определенный пользователь на определенном сайте зная лишь только его email адрес или номер телефона. То есть страдает конфиденциальность.

    Пример реализации можно увидеть на сайте yandex.ru.
    Ответ написан
    Комментировать
  • Как построить архитектуру приложения?

    @dmshar
    Дело в том, что если сейчас (как я понял, после аж полугода изучения программирования) вы начнете что-то читать по архитектуре программных систем - 90% информации, которую вы найдете вы просто не поймете.
    Ну например:
    https://habr.com/ru/post/276593/
    https://www.rea.ru/ru/publications/AttachmentsLibr...
    https://martinfowler.com/architecture/
    https://www.amazon.com/Fundamentals-Software-Archi...
    И это не ваша вина. Просто проектирование архитектуры - это не то, чем занимаются юниор-программисты. Для того, что-бы нормально спроектировать архитектуру мало знать язык программирования - надо знать еще очень много чего "вокруг". От баз данных до особенностей сценариев взаимодействия компонентов типа Peer-to-peer, Клиент-серверной и прочих (коих десятки) , от умения работать с требованиями до навыков написания технического проекта, от умения обосновать выбор (одной из многих) технологий реализации проекта до умения оценки качества программного продукта, от алгоритмизации до многопоточности, соответствующие инструменты (нотации) и очень много чего еще. Этому всему люди учатся годами. Даже в универах, на соответствующих специальностях вводный курс архитектуры ПО часто читают уже магистрам, и все равно этот курс весьма обзорный и ознакомительный. Поэтому не торопитесь. Займитесь пока усовершенствования своих базовых программистских навыков. И самообразованием в области компьютерных технологий. И наработкой практики. Вот когда вы это все освоите - вот тогда и можно будет задуматься о решении архитектурных задач.
    Ответ написан
    Комментировать
  • Как создать бесконечную компиляцию в терминале (как у хакеров)?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    tmux, в нем htop, tcpdump и еще что-нибудь

    разноцветно, красиво, всегда так делаю
    Ответ написан
    Комментировать
  • Как работают самокэширующиеся (если это слово подходит) веб-приложения?

    В ютубе реализовано через Service Worker https://developer.mozilla.org/ru/docs/Web/API/Serv...
    Через pwa тоже можно
    Ответ написан
    Комментировать
  • Как компилировать все файлы typescript в один файл, при написании приложения под Node?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В один файл бандлить умеют.. бандлеры! ) Gulp, Grunt, Babel, WebPack, новый-быстрый Vite и другие. Они уже при сборке умеют и ts транспилировать, если прикрутить соотв. примочку. Например, про WebPack в документации TypeScript, или про TypeScript в конфигурации Vite (умеет из коробки).
    Ответ написан
    2 комментария
  • Разница между prompt и +prompt?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    +prompt будет пытаться привести значение к числу, аналогично Number(prompt).
    Ответ написан
    2 комментария
  • Как узнать, существует ли email?

    vabka
    @vabka Куратор тега Веб-разработка
    Отправить на эту почту письмо с ссылкой для продолжения регистрации.

    Больше никак
    Ответ написан
    Комментировать
  • Как, сидя за натом провайдера, запрашиваемая инфа из инета знает точную сеть клиента?

    @res2001
    Developer, ex-admin
    Когда вы за натом провайдера, то внешний сервис может знать только адрес с которого вы реально выходите в интернет, т.е. внешний адрес NATа.
    Внешний сервис может заблокировать этот адрес. Тогда все ваши соседи по NATу, автоматически окажутся заблокированы.

    Другой момент: у провадйера пул белых адресов, с которых клиенты могут получать доступ в инет. В пуле может быть несколько подсетей, выданных провайдеру.
    Информация о подсетях провайдера общедоступна в интернете. Ее можно получить через сервисы whois и т.п.
    Так что получив один адрес, сервис может узнать всю подсеть провайдера и заблокировать ее всю.
    Ответ написан
    3 комментария
  • Как, сидя за натом провайдера, запрашиваемая инфа из инета знает точную сеть клиента?

    karabanov
    @karabanov
    Системный администратор
    какому именно из кучи других клиентов принадлежит это обращение

    У роутера есть NAT таблица в ней соответствие SRC_IP:SRC_PORT -> DST_IP:DST_PORT так и узнаёт.

    как сервер понимает, что конкретно компам из моей сети запрещено заходить на серв

    В интернете IP адреса из локально сети не маршрутизируются. Если забанили по IP в который натяться адреса из локальной сети, то и вся локальная сеть окажется забаненой.
    Ответ написан
    4 комментария
  • Как создать тикающие часы JS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const colon = sec % 2 === 0 ? ':' : ' ';
    timeElement.textContent = `${hours}${colon}${min}${colon}${sec}`;
    Ответ написан
    Комментировать
  • Почему первый элемент в нативной функции javascript - sort() - это второй элемент в моем массиве?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Callback-функция в sort - это просто функция, задающая соотношение между сравниваемыми значениями a и b. При работе алгоритма сортировки она вызывается для каждой пары значений и, возможно, неоднократно.
    Ответ написан
    2 комментария
  • Множественный if then else, как заменить, упростить и простить?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Паттерн Strategy.
    Или Reflection.
    Или HashMap.
    Или Dictionary.
    Или switch... case
    В зависимости от деталей задачи.
    Ответ написан
    Комментировать
  • Почему Front end разработчику платят так же, а то и больше, чем Full-stack разработчику?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Дело не во фронтеде, бэкенде или фулстэке. Просто рынок нагревается такими темпами. Меняя работы в этом году каждые три месяца, можно было получить двухкратную прибавку.
    Ответ написан
    2 комментария
  • Почему возникает ошибка "Property 'toLowerCase' does not exist on type 'Ref'"?

    0xD34F
    @0xD34F Куратор тега Vue.js
    seachCityName - обычная строка

    Да ну? Судя по тексту ошибки - это ref. А значит, вашей строкой будет seachCityName.value.
    Ответ написан
    1 комментарий
  • Как запустить файл с расширением .bat из node.js?

    amorphis
    @amorphis
    Технолог в Студии Артемия Лебедева
    Вам поможет Child process
    Ответ написан
    Комментировать
  • Как работают интерпретаторы компилирующего типа?

    Jump
    @Jump
    Системный администратор со стажем.
    Вы как то неверно представляете себе что такое компиляция, отсюда все вопросы.

    Компиляция это по факту перевод программы с языка высокого уровня на язык понятный машине.
    • Берем программу целиком, прочитали, проанализировали, и перевели ее целиком в машинный код. Это компиляция.
    • Берем одну инструкцию, переводим ее в машинный код, и выполняем это интерпретация


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

    Если по простому у вас есть инструкция по ремонту двигателя.
    • Вы можете прочитать инструкцию, проанализировать ее, понять какие материалы, запчасти понадобятся, возможно оптимизировать какие-то действия и составить план действий по ремонту. Это и есть компиляция.
    • Но вы можете прочитать первую строку инструкции где написано - снимите двигатель. Выполнить ее, после чего перейти к чтению второй строки инструкции. Это интерпретация.


    1) Интерпретаторы - считывают команды на языке высокого уровня построчно и построчно их выполняют.
    То есть считал строку, скомпилировал - получил двоичный код. Выполнил этот двоичный код.
    Идет поочередное выполнение команд . Прочитал инструкцию на языке программирования, и перевел ее в машинный код и выполнил. Никакой компиляции. Для компиляции нужно прочитать всю программу.
    Результат работы компилятора - программа на другом языке.
    Результат работы интерпретатора - выполненная инструкция
    Разницу замечаете?
    Ответ написан
    1 комментарий
  • Как работают интерпретаторы компилирующего типа?

    @Mercury13
    Программист на «си с крестами» и не только
    1) То есть считал строку, скомпилировал - получил двоичный код. Выполнил этот двоичный код.

    НЕТ. Считал — выполнил. Выполняется машинный код интерпретатора, а не программы.

    3) Байт-код понятен среде/виртуальной машине (.NET, Java), которая компилирует байт-код в двоичный код

    В ЧИСТОМ СЛУЧАЕ — НЕТ. Считал команду байт-кода — выполнил. Точно так же выполняется машинный код интерпретатора, а не программы. Что-то вроде:
    switch (opcode) {
    case OP_ADD: {
           auto res = stack.pop() + stack.pop();
           stack.push(res);
       }
    .....
    }


    Байт-код используется по нескольким причинам.
    1. 3 быстрее 1.
    2. С расширением языка мы меняем только компиляцию в байт-код. Оптимизация байт-кода, интерпретатор — остаются.

    А компиляция в машинный код в 1 и 3 — это так называемая JIT-компиляция. Она может выполняться не всегда. Одни команды могут быть в машинном коде, а другие — интерпретироваться.

    Кроме того, байт-код часто используется и в классических компиляторах 2-го типа! Это позволяет делать многоплатформенные коллекции компиляторов — все frontend’ы компилируют в байт-код, затем с байт-кодом делаем какую-то магию вроде оптимизации, отдаём его backend’у, и тот готовит OBJ-файл для нужного процессора.
    Ответ написан
    Комментировать
  • Почему при сложении массив превращается в строку, а объект в object Object?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    [].toString() // "" (пустая строка)
    {}.toString() // "[object Object]" (строка)

    spoiler
    const myObject = {}; // «тоже объект»
    myObject.toString = () => "QnA!"; // свой метод преобразования в строку
    
    myObject + "habr" //  "QnA!habr"
    Ответ написан
    2 комментария