• Как правильно использовать интерцепторы в axios?

    kulakoff
    @kulakoff Куратор тега Vue.js
    Vue.js developing
    Можно - это одна из практик, т.е. когда вы делаете первый раз запрос к апи, например, чтобы получить текущего пользователя, и в случае, если получаете ошибку доступа, переходите на страницу авторизации.
    Но также можно реализовать аналогичное поведение используя хуки вью роутера. Т.е. в хуке .beforeEach делаете запрос пользователя, если и тут же в исключении делаете переход на авторизацию:
    store.dispatch('urrent_user')
            .then(r => {
                // next processing
            })
            .catch(e => {
                 // goto login
            })
    Ответ написан
    2 комментария
  • Как правильно использовать интерцепторы в axios?

    owl1n
    @owl1n
    fullstack developer
    Покажу немного практик, как интерцепторы упрощают жизнь мне, да и многим, в целом.
    Здесь и далее покажу именно использование интерцепторов при работе с авторизацией по JWT (токены).

    1) Подстановка хедера авторизации

    const createSetAuthInterceptor = options => config => {
      if (options.access) {
        config.headers.Authorization = options.access;
      } else {
        delete config.headers.Authorization;
      }
      return config;
    };
    
    const setAuthCb = createSetAuthInterceptor(store.state.auth);
    axios.interceptors.request.use(setAuthCb);


    Здесь мы проверям наличие доступа из стора, а точнее, наличие токена. Далее, подставляем, либо удаляем заголовок.

    2) Следующая практика, это обновление токена (то, о чем вы спросили в комментарии, при окончании сессии и т.д.)

    let refreshTokenPromise;
    
    const createUpdateAuthInterceptor = (store, http) => async error => {
      const message = get(error, 'response.data.message');
      if (!['Token expired', 'Invalid token'].includes(message)) {
        return Promise.reject(error);
      }
    
      if (!refreshTokenPromise) {
        refreshTokenPromise = store.dispatch('refreshToken');
      }
    
      await refreshTokenPromise;
      refreshTokenPromise = null;
    
      return http(error.config);
    };
    
    const updateAuthCb = createUpdateAuthInterceptor(store, axios);
    axios.interceptors.response.use(null, updateAuthCb);


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

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

    Oxyd
    @Oxyd
    Linux enthusiast
    Копировать из старого профиля только эти файлы(*.sqlite ещё не мешало-бы пропуржить стандартными утилитами sqlite). Или, что лучше, использовать Firefox Sync, вместо ручного переноса профилей.
    Ответ написан
    1 комментарий
  • Хочу заниматься веб-разработкой, с чего начать?

    Kozack
    @Kozack
    Thinking about a11y
    Что для этого нужно диктуют работодатели. Определите примерную ЗП которую хотите. Посмотрите список вакансий предлагающую её. Просмотрите их требования.

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

    Кто-то выполняет разработку сайтов под ключ на WordPress. Тут вам нужно помимо помимо знаний html, css понимать как работает ВП: Какой html он генерирует при выводе меню, в каком виде он создаёт виджеты, какие теги он генерирует сам, а какие должны прописать вы. И т. д.

    У кого-то может быть один крупный корпоративный сайт. Тут вам пригодятся другие навыки.

    для этой сферы необходимо: html, css, botstrap. flexbox, grid, sass,javascript, jQuery, ES6, React.js, git

    Еееее ... нет.
    • html, css — Основные технологии для верстки.
    • flexbox, grid — отдельные свойства стилей. Должны изучаться вместе со всем остальным css.
    • javascript — Будет большим плюсом для верстки.
    • ES6 — Спецификация javascript. Должна изучаться вместе со всем остальным javascript. Это если вы хотите более серьёзно расти в этом направлении.
    • git — Будет полезен лично вам и не плохим плюсом в резюме при работе над большими проектами. При конвеерной верстке лендингов этого от вас навряд кто-то будет требовать.
    • botstrap — Набор готовых стилей. Требуется не всегда и не везде.
    • jQuery — Абстракция над скриптами. Требуется не всегда и не везде.
    • sass — Препроцессор. Альтернатива css. Требуется не всегда и не везде.
    • React.js — javascript Фреймворк. Требуется не всегда и не везде.


    Стоит ли задумываться о платных курсах

    Если видите, что того что есть в интернете вам не хватает — да. Если понимаете что без наставника у которого можна переспросить или попросить объяснить какой-то момент вы не справляетесь — да.

    За сколько я могу освоить эту отрасль для того, чтобы найти работу и развиваться дальше?

    Вы хоть уже можете начать поиски работы. Есть работодатели готовые нанимать новичков, за дешево и давать им базовые знания. И ставить на простые задачи.

    задумалась о фрилансе

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

    или дистанционной работе, это реально, или лучше сперва работать на компанию

    Всё зависит от специфики компании. Как вам будет удобнее. Но если хотите развивать навыки коммуникации я бы не брал удалёнку.

    UPD.
    По личному опыту добавлю, что обучение само по себе это хорошо. Но не очень полезно. Но вот обучение в рамках решения каких-то задач — куда лучше.
    Это как с советами — он должен быть к месту. Если я просто расскажу вам что есть метод Element.scrollIntoViewIfNeeded() то скорее всего вы забудете о нем через пару дней. Но вот изучив его пытаясь найти решение какой-то проблемы — запомните о нем надолго.

    Так, что лучше всего найти какую-то работу и развиваться в рамках поставленных задач. Когда поймёте, что перестали расти — меняйте работу. У вас уже будет какой-то опыт и портфолио.

    Так же хобби проекты — как для меня, отличный способ "прокачки". Но это только в том случае если у вас есть страсть и желание искать новые способы, технологии для развития и улучшения своего детища.
    Ответ написан
    Комментировать
  • Как скачать с помощью wget по маске не зная какие страницы есть?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    #!/bin/bash
    start= 593 #номер поста с которого начинаем брутфорсить
    end=22593 #номер поста на котором заканчиваем
    
    for (( i=start; i<=end; i++ ))
    do  
        uri=https://somename.livejournal.com/$i.html
        #скачиваем только со статусом 200
        wget --server-response $uri -O $i.html 2>&1| grep -c 'HTTP/1.1 200 OK'
    done
    Ответ написан
    6 комментариев
  • Как узнать размер (кол-во занимаемых байт) объекта в PHP?

    $before=0;
    $a='испытуемая переменная либо массив или объект';
    $before = memory_get_usage();
    unset($a);
    echo 'размер переменной составил: ',$before-memory_get_usage(),' байт';
    Ответ написан
    Комментировать
  • Как получить два последних значения MYSQL в каждой категории?

    @retvizan
    Есть как минимум 6 способов, см Выбрать несколько записей из каждой группы
    В старых версиях хороший результат может показать трюк с group_concat().
    Ответ написан
    Комментировать
  • MySQL vs другие СУБД - что лучше?

    Kerman
    @Kerman
    Препод Вам так говорит, потому что есть такое понятие - стек технологий Microsoft. И для многих C# должен стыковаться только с MSSQL, но не с другими базами. В этом действительно есть смысл, когда проект очень большой. Грубо говоря, язык и БД, разработанные в одной компании, довольно тесно интегрированы. Но это не значит, что MSSQL единственный и самый разумный выбор.
    Я сам пишу на C# и пользуюсь MySQL вместо MSSQL. Почему:
    1. MySQL запускается на любой OS (не требует платной лицензии Windows).
    2. Полнофункциональная MySQL бесплатна в отличие от.
    3. Легковесна, не требует мощного железа. Как следствие - быстрее на аналогичном железе.
    4. Хостинг MySQL на каждом углу.
    5. Выбор движков под каждую таблицу и каждый случай.
    6. Полнотекстовый поиск (в MyISAM).
    7. Есть форки, которые гарантируют нормальное развитие, если Oracle решит что-нибудь нехорошее сделать. Ну что тут говорить, OpenSource же.

    При этом современная MySQL поддерживает многие фичи современных БД: View, triggers, functions, stored procedures, events, subqueries.
    Ответ написан
    2 комментария
  • Медленный ли Symfony?

    @edb
    SQL
    1. При тестировании несуществующего метода в symfony генерируется исключение, а это всегда дорого и медленно.
    2. Когда тестировался существующий метод, то разница показала реальную производительность фреймворка. И разница в чуть менее в 2 раза не такая уж и большая.
    3. Symfony используют не для выигрыша в производительности. Гораздо важнее тут скорость разработки и качество кода.
    Ответ написан
    2 комментария
  • Шаблонизаторы ещё актуальны?

    riky
    @riky
    Laravel
    Smarty можно найти наверное только в древних проектах.
    Twig очень даже да. его киллер фича - extends главное его понять.
    Ответ написан
    4 комментария
  • Как подружить gulp + browserify (babelify, vueify)?

    @myskypesla Автор вопроса
    Правильный таск для gulp:
    gulp.task('js', function() {
      return browserify({ entries: 'src/js/main.js'})
        .transform(babelify, { presets: ['es2015'] })
        .transform(vueify)
        .bundle()
          .pipe(source('app.js'))
          .pipe(gulp.dest('public/js'))
          .pipe(connect.reload());
    });
    Ответ написан
    Комментировать