Задать вопрос
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов,
    UPD: поменялось, вы были правы. Я открывал целевой домен, а не исходный. Там действительно есть скрипт. И он ставит куку, в которой содержится некий IP адрес. Вот только у меня есть вопрос, почему это делают через куку, а не отправку HTTP кода или через редирект внутри тега script (например, location.reload)?

    по куке сервер может генерить js на лету, а там и будет location.reload(значение из куки)
    И нужно это, скорее всего, чтобы один сервер в единой точке выполнял все редиректы.
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов, на домене 3го уровня и надо проверять MX ибо то, что после @ и есть почтовый домен. И для
    some@sub1.site.com
    some@sub2.site.com
    some@sub3.site.com
    some@site.com
    будут разные MX записи, сервера могут совпадать, т.е значения MX, а вот MX запись должна быть для каждого варианта, иначе письмо не доставить.
  • Как отслеживать выход из сети?

    Daemon23RUS
    @Daemon23RUS
    Сергей delphinpro, Это будет же следующий уровень. А на следующем уровне статусы могут быть такие (как пример) онлайн оффлайн, неактивен(отошел), печатает и тд.
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов, Игра с куками, 1й раз код есть, 2й раз (кука уже есть) нет кода. Это метод такой защиты от дебага.
  • Как сделать подложку(карту) на Python?

    Daemon23RUS
    @Daemon23RUS
    IstDanya, Это если с Folium уже завязались, а так вариантов действительно полно, все гуглится, Вам проще гуглить, у Вас самое полное представление о задаче.
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов, Все банально, на основе userAgent cloudfave.com отдает html сo скриптом, скрипт дропает тело html все выглядит пустым. А далее идет "магия JS" и "шаманство с куками" смысл которого, если есть кука отдает реальный код, нет куки - пустышку. Можно в деталях это разобрать, но опять вопрос, зачем ? Практической пользы будет 0, все методы давно известны и задокументированы, никакого чуда там не происходит.
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Добавлю, чтобы было однозначное толкование Клиент отвечает за получение нового токена, а мидл отвечает за его проверку. Т.е обязанность держать актуальный токен лежит на клиенте
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Правильно, рефреш токен в куках но летает только на api/auth//refreshtoken, что и указано в его Path=/api/auth/refreshtoken. На api/users этот кукис не летит. Туда летит сам JWT. Так вот мидваре проверяет этот самый JWT на валидность, в том числе и на просрочку. И вот в случае просрочки, мидл бросает исключение, и отправляет что токен просрочен, а сам запрос в этом случае до роута не доходит. Клиент получив от api/users ответ что доступа нет просрочка, идет на /api/auth/refreshtoken, а так как с этим path у клиента есть кука рефреш он ее тянет с собой. /api/auth/refreshtoken возвращает клиенту новый токен и в куку новый рефреш. (ну или ошибку просрочки рефреша и тогда клиент идет на /login)
    Клиент успешно получив новый токен, повторяет запрос на api/users
    Профит !!!
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Я выскажу личное мнении, считайте это мысли вслух.
    таскать рефреш в каждый запрос -зло, у этой куки должен быть Path=/api/auth/refresttoken и именно в этом запросе ее надо светить. Именно по этому я все время твержу, что у вас в схеме что то не то.
    Вопрос обновления токена вы по какой то причине сняли с клиента и повесили на сервер. И теперь у вас с этим проблема. По факту вы JWT превратили в сессию. Ведь это задача клиента следить за тем, что его токен жив и после просрочки получать новый, для этого есть api/auth/refresttoken а серверное апи путем проброса исключения в ответе tokenexpired на всех роутах апи сообщает клиенту либо данные либо ошибку. И клиент поличив tokenexpired идет обновлять токен, а потом повторяет запрос с новым токеном.
    Расскажите где я не прав ?
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, В общем я попробовал у себя, то что хотите сделать Вы (модификацию отправляемых данных) Создал пустой проект с 2мя роутами
    фрагмент app.js
    app.use('/api',function(req, res, next) {
      var originalSend = res.send;
      res.send = function (){
        let temp=JSON.parse(arguments[0]);
        temp.mw_add="Some Data From Middleware";
        temp.mw_time = Date.now()
        res.cookie('MiddleWare','added after route send')
        arguments[0] = JSON.stringify(temp);
        originalSend.apply(res,arguments);
      }
      next();
    });
    app.use('/api', APIRouter);

    api_route.js
    var express = require('express');
    var router = express.Router();
    const some_api_data={api_value:35,api_status:"Status OK"}
    /* GET API page. */
    router.get('/', function(req, res, next) {
      res.status(200).json(some_api_data)
    });
    module.exports = router;

    посылаемые данные в роуте {"api_value":35,"api_status":"Status OK"}
    принимаемые данные клиентом
    {"api_value":35,"api_status":"Status OK","mw_add":"Some Data From Middleware","mw_time":1700082379016}
    + устанавливается кука
    Set-Cookie: MiddleWare=added%20after%20route%20send; Path=/

    Вы конечно можете адаптировать все это под себя, но это будут жутчайшие костыли. Мне было интересно как это можно сделать, я свой интерес удовлетворил. Без учета этого в роутах - все плохо.
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Прежде чем продолжить поиск решения, скажите, Вы рефреш заставляете клиента таскать в каждый запрос ?
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Я ранее как раз об этом и писал, что делаем если токен протух а рефреш жив
    Ведь данные мы не можем отдать если токен протух. а чтобы на лету его обновить нужен рефреш, который мы по идее каждый раз в запрос не таскаем. А предоставляем только на эндпоинт рефреша, где и получаем новые токен и рефреш. Вот в принципе этот вопрос я и поднимал в своем ответе, что вы что то недоговариваете, или как то по другому реализовываете.
  • Как технически (в общих чертах) можно реализовать оплату телефоном новым способом (ниже детали)?

    Daemon23RUS
    @Daemon23RUS
    rPman, Да, это как раз та самая вариативность при взаимодействии по сети, так возможностей гораздо больше. Уж не знаю как я вчера читал вопрос, и где мне почудилось про список товаров, передачу которого я так расписал.
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007,
    Подскажите пожалуйста, что значит
    res.body + "modified"; и по какому принципу это работает?

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

    Daemon23RUS
    @Daemon23RUS
    Boris007, Может вы хотите что то вроде такого
    function modify(req, res, next){
      res.body = res.body + "modified";
    
      next();
    } и положите туда все свои "повторяющиеся хотелки"
    Тогда есть один момент, если токен протух, а рефреш еще жив, мы отдаем инфу доступную только по действующему токену ?
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007,
    Вот пример как это можно сделать
    apiRouter.use(function(req, res, next) {
          var token = req.body.token || req.query.token || req.headers['x-access-token'];
          if (token) {
            jwt.verify(token, app.get('superSecret'), function(err, decoded) {
              if (err) {
                //Here I can check if the received token in the request expired
                if(err.name == "TokenExpiredError"){
                    var refreshedToken = jwt.sign({
                        success: true,
                        }, app.get('superSecret'), {
                            expiresIn: '5m'
                        });
                    request.apiToken = refreshedToken;
                    next();
                  }else if (err) {
                    return res.json({ success: false, message: 'Failed to authenticate token.' });
                  }         
              } else {
                //If no error with the token, continue 
                request.apiToken = token;
                next();
              };
            });
          } else {
            return res.status(403).send({
                success: false,
                message: 'No token provided.'
            });
          }
        });

    Так же посмотрите stackoverflow.com по схожему вопросу. (код оттуда) Это если я правильно понял вашу проблему. (день выдался длинный ...)
  • Какой резистор выбрать для нагрузки блока питания ATX?

    Daemon23RUS
    @Daemon23RUS
    Виктор, Это не хорошо и не плохо, это нюанс. В каких то применениях идет плюсом (сам использовал) а в каких то минусом (перегрузка на старте).
  • Как получать оповещения на почту/Телеграм для Linux CUPS?

    Daemon23RUS
    @Daemon23RUS
    renikrenik, Мое мнение по этому процессу: не буду спорить по поводу уведомления, 50/50 есть плюсы и минусы. Однозначно лишним не будет. А вот по организации процесса комплектования заказов могу поделится опытом (в моем случае не только комплектация, но и выпуск персонализированной продукции, для одного гигантов игровой индустрии). СUPS работает уже лет 5, держит с десяток принтеров. От потеряных/пропущенных листков изза принтера спасает контроль по ШК собранных заказов в точке забора на доставку. Т.е если через 2-3 часа ШК заказа не засветился на точке - бьем тревогу и ищем его. Работает на 100% и предотвращает массу инцидентов.
  • Какой резистор выбрать для нагрузки блока питания ATX?

    Daemon23RUS
    @Daemon23RUS
    Виктор, Лампочка - хорошо и просто, дешево и сердито. Но есть нюанс!!! Вольфрам в нити накаливания при нагреве изменяет свое сопротивление почти в 10 раз. Если этот момент упускать, можно огрести детских ошибок. Например исправный БП будет уходить в защиту, при подключении галогенок. И это будет его правильное поведение. А вот вывод о его исправности можно сделать неверный.
  • Какой резистор выбрать для нагрузки блока питания ATX?

    Daemon23RUS
    @Daemon23RUS
    inneks, Чтобы оценить, является ли мой ответ решением, Посмотрите правила, в частности п5.12.
    И да, я умышленно не дал конкретный короткий ответ, хотя и он там присутствует под спойлером.
    Я дал методику расчета, по которой любой сможет решить подобную задачу, и Вы том числе. Толку от ответа что Вам надо 0,68 Ом, для остальных пользователей ресурса почти 0. Не исключаю, что у Вас сложилось ошибочное представление о ресурсе, отсюда и "оценка правильности ответа". Лично я от отметки ничего не получаю, мне глубоко фиолетово. Я не стремлюсь ни к каким рейтингам. 2й момент, когда я пишу ответ, я иногда просматриваю профиль пользователя, чтобы слегка иметь представление, в каком формате будет мой ответ. О чем и написал в комменте выше, мне показалось странным, что вы не получили ни одного ответа (который признан решением) на свои вопросы. И исходя из Вашего комментария, я сделал вывод, об "ошибочном представлении.."