Есть два основных подхода для аутентификации пользователя
Аутентификация на основе сессии
При этом подходе вы храните информацию о сессии в базе данных или хранилище сессий и передаете идентификатор сессии пользователю.
Представьте, что пассажир получает только идентификатор билета на свой рейс, а все остальные данные хранятся в базе данных авиакомпании.
Вот как это работает:
- Пользователь делает запрос на вход в систему, и он отправляется на внутренний сервер..
- Бэкэнд создает сессию с использованием секретного ключа и сохраняет данные в хранилище сессий.
- Сервер отправляет клиенту cookie с уникальным идентификатором сессии.
- Пользователь делает новый запрос, и браузер отправляет идентификатор сессии вместе с запросом.
- Сервер аутентифицирует пользователя по идентификатору сессии.
Аутентификация на основе JWT
В подходе на основе JWT информация о сессии не хранится в хранилище сессий.
Вся информация доступна в токене.
Представьте себе, что вы получаете авиабилет вместе со всеми деталями, имеющимися на билете, но в закодированном виде.
Вот как это работает:
- Пользователь делает запрос на вход в систему, и он отправляется на внутренний сервер.
- Сервер проверяет учетные данные и выдает JWT. JWT подписывается с помощью закрытого ключа и не требует хранения сессии.
- JWT передается клиенту либо в виде cookie, либо в теле ответа. У обоих подходов есть свои плюсы и минусы.
- При каждом последующем запросе браузер отправляет cookie с JWT.
- Сервер проверяет JWT с помощью секретного закрытого ключа и извлекает информацию о пользователе.
#jwt #auth
Аутентификация на основе сессии
При этом подходе вы храните информацию о сессии в базе данных или хранилище сессий и передаете идентификатор сессии пользователю.
Представьте, что пассажир получает только идентификатор билета на свой рейс, а все остальные данные хранятся в базе данных авиакомпании.
Вот как это работает:
- Пользователь делает запрос на вход в систему, и он отправляется на внутренний сервер..
- Бэкэнд создает сессию с использованием секретного ключа и сохраняет данные в хранилище сессий.
- Сервер отправляет клиенту cookie с уникальным идентификатором сессии.
- Пользователь делает новый запрос, и браузер отправляет идентификатор сессии вместе с запросом.
- Сервер аутентифицирует пользователя по идентификатору сессии.
Аутентификация на основе JWT
В подходе на основе JWT информация о сессии не хранится в хранилище сессий.
Вся информация доступна в токене.
Представьте себе, что вы получаете авиабилет вместе со всеми деталями, имеющимися на билете, но в закодированном виде.
Вот как это работает:
- Пользователь делает запрос на вход в систему, и он отправляется на внутренний сервер.
- Сервер проверяет учетные данные и выдает JWT. JWT подписывается с помощью закрытого ключа и не требует хранения сессии.
- JWT передается клиенту либо в виде cookie, либо в теле ответа. У обоих подходов есть свои плюсы и минусы.
- При каждом последующем запросе браузер отправляет cookie с JWT.
- Сервер проверяет JWT с помощью секретного закрытого ключа и извлекает информацию о пользователе.
#jwt #auth
Есть инструмент для облегчения миграции с миксинов на композаблы - vue-mixable
Автор - член
#mixins
Автор - член
Vue.js
команды Linus Borg
#mixins
GitHub
GitHub - LinusBorg/vue-mixable: Turn Vue Mixins into Composables with a simple wrapper function
Turn Vue Mixins into Composables with a simple wrapper function - LinusBorg/vue-mixable
Такая забавная статья про
Автор хочет типизацию как в
#css #ts
CSS
попаласьАвтор хочет типизацию как в
TypeScript
, но только для CSS
#css #ts
Хабр
CSS-классы вредны
Если вы когда-нибудь заглядывали за кулисы пользовательских веб-интерфейсов, то знаете для чего нужно свойство class . Оно ведь нужно для связи HTML с CSS, правда? Сейчас я расскажу о том, почему...
// Vue 3
const app = createApp(App);
app.config.errorHandler = (err) => {
alert(err);
};
Во
Vue
можно создать собственный обработчик ошибок и ворнингов для лучшей обработки ошибок для улучшения UX
.Например, вместо того, чтобы приложение падало, если ошибка не была обработана, вы можете показать специальный экран ошибки и попросить пользователя обновить страницу или сделать что-то еще.
Обработчик ворнингов работает только в
dev
режиме.#tip
Для чего нужны
В проектах
tsconfig.json:
- Основной файл конфигурации
- Определяет глобальные настройки
- Может включать ссылки на другие файлы конфигурации
-
tsconfig.node.json:
- Конфигурация
- Определяет настройки
- Используется
#vite #ts #nodejs
tsconfig.node.json
, tsconfig.json
, (tsconfig.vitest.json
)?В проектах
Vue
, созданных с помощью Vite
, используются несколько файлов конфигурации TypeScript
, каждый из которых играет свою роль в компиляции и тестировании TypeScript
-кода.tsconfig.json:
- Основной файл конфигурации
TypeScript
.- Определяет глобальные настройки
TypeScript
для всего проекта, такие как целевая версия JavaScript
, модульная система, пути к файлам и т.д.- Может включать ссылки на другие файлы конфигурации
TypeScript
(extends, references).-
tsconfig.json
по умолчанию не используется в Vite
для компиляции кода.tsconfig.node.json:
- Конфигурация
TypeScript
для среды Node.js
.- Определяет настройки
TypeScript
, специфичные для компиляции кода в Node.js
.- Используется
Vite
для компиляции TypeScript
-кода серверной части приложения.#vite #ts #nodejs
При попытке пользователя уйти с сайта (
Вот пример Vue 3 композабла для этого
#tip
exit-intent
), можно показывать сообщение (мольба остаться, подарок суперскидки, предложение сохранить сделанные изменения и т.п.)Вот пример Vue 3 композабла для этого
#tip
GitHub
GitHub - nickap/vue-exit-intent: A helper to know when a user is about to leave your page.
A helper to know when a user is about to leave your page. - nickap/vue-exit-intent
Все браузеры кроме
#animation
Firefox
поддерживают View Transitions API - это примерный аналог анимаций Transition
во Vue.js
#animation
MDN Web Docs
View Transition API - Web APIs | MDN
The View Transition API provides a mechanism for easily creating animated transitions between different website views. This includes animating between DOM states in a single-page app (SPA), and animating the navigation between documents in a multi-page app…
Почти анекдот получился
Надо было сделать форму сбора данных с пользователя. Ну, заморочился на собственный степпер и валидацию, получилось неплохо
Потратил несколько дней, начальнику показываю. Он так одним глазом смотрит и говорит:
- Это все теперь не надо. У нас будет одна кнопка, пользователь на нее нажимает, и AI чатбот с него всю информацию в режиме голосового диалога собирает. Круто?
Че тут скажешь, конечно круто. Космос, ёпта...
#meme
Надо было сделать форму сбора данных с пользователя. Ну, заморочился на собственный степпер и валидацию, получилось неплохо
Потратил несколько дней, начальнику показываю. Он так одним глазом смотрит и говорит:
- Это все теперь не надо. У нас будет одна кнопка, пользователь на нее нажимает, и AI чатбот с него всю информацию в режиме голосового диалога собирает. Круто?
Че тут скажешь, конечно круто. Космос, ёпта...
#meme
Кое-что новое
В отношениях родитель-ребенок-слот содержимому слота ребенок может передавать пропсы, как указано в документации:
Часто нужно и событие из слота переслать в ребенка. Напрямую сделать это нельзя, но можно также пропсом передать слоту ссылку на метод в ребенке, который тот и вызовет по событию:
Этот хак бывает очень полезен и не выходит за рамки правила: "Пропсы вниз, события вверх".
#tip #slots
В отношениях родитель-ребенок-слот содержимому слота ребенок может передавать пропсы, как указано в документации:
<!-- <MyComponent> template -->
<div>
<slot :text="msg"></slot>
</div>
<MyComponent v-slot="{ text }">
{{ text }}
</MyComponent>
Часто нужно и событие из слота переслать в ребенка. Напрямую сделать это нельзя, но можно также пропсом передать слоту ссылку на метод в ребенке, который тот и вызовет по событию:
<!-- FormField -->
<script>
const touched = ref(false);
</script>
<template>
<div class="form-field">
<slot :touch="() => { touched = true }" />
...
</div>
</template>
<!-- использование -->
<FormField v-slot="{ touch }">
<BaseInput @input="touch()" />
</FormField>
Этот хак бывает очень полезен и не выходит за рамки правила: "Пропсы вниз, события вверх".
#tip #slots
В комментариях снова загорелись огни миниско-климовской войны, захотелось порассуждать
Курсы надо отделать от их авторов. Не полностью, но всё же.
Сравнивать Климова и Минина некорректно, потому что к Климову в техническом плане хоть и есть вопросы и несогласие с чем-то, но у него есть
Минин же - этобоец ММА с 2-3 годами опыта просто говорящая голова, читающая по суфлеру, что дают, и основная задача которого - получение прибыли на чем угодно и вне зависимости от последующих успехов учеников.
Так же как с начиткой художественного произведения для аудиокниг, - чтец может как подчеркнуть его красоту, так и полностью испортить впечатление от него. И зачастую, это субъективно для слушателя.
А вот сравнивать курсы и их пользу можно. Но я не буду, потому что нет статистических данных. Неоспоримая польза от миниских курсов это появление конкуренции, что на рынке всегда хорошо. И неявная польза для Климова (если, конечно, ему важней репутация, чем заработок) - избавление от конкретных вкатунов, которым милее мининский подход.
То есть, если выбирать из этих двоих что-то типа ментора, ответ очевидный. Если смотреть на курсы - уже не такой очевидный.
Как вообще учиться IT?
Хорошие проверенные временем книжки. Хорошие бесплатные курсы от проверенных авторов, в том числе, университетов типа МГУ и MIT (#learning). Сообщество, где можно задать вопрос. Желание познавать.
#learning #minin #klimov
Курсы надо отделать от их авторов. Не полностью, но всё же.
Сравнивать Климова и Минина некорректно, потому что к Климову в техническом плане хоть и есть вопросы и несогласие с чем-то, но у него есть
Curriculum Vitae
("жизненный путь") в разработке ПО. Есть определенные знание и опыт. Минин же - это
Так же как с начиткой художественного произведения для аудиокниг, - чтец может как подчеркнуть его красоту, так и полностью испортить впечатление от него. И зачастую, это субъективно для слушателя.
А вот сравнивать курсы и их пользу можно. Но я не буду, потому что нет статистических данных. Неоспоримая польза от миниских курсов это появление конкуренции, что на рынке всегда хорошо. И неявная польза для Климова (если, конечно, ему важней репутация, чем заработок) - избавление от конкретных вкатунов, которым милее мининский подход.
То есть, если выбирать из этих двоих что-то типа ментора, ответ очевидный. Если смотреть на курсы - уже не такой очевидный.
Как вообще учиться IT?
Хорошие проверенные временем книжки. Хорошие бесплатные курсы от проверенных авторов, в том числе, университетов типа МГУ и MIT (#learning). Сообщество, где можно задать вопрос. Желание познавать.
#learning #minin #klimov
Компоненты
Варианты использования:
- Сохранение номеров версий для отдельных компонентов
- Пользовательские флаги для инструментов сборки, чтобы по-разному обрабатывать компоненты
- Добавление кастомного функционала к компоненту, помимо стандартного из Options API и т.д.
#tip
Vue
могут иметь статичные метаданные:// LiveUsersWidget.vue
<script setup>
defineOptions({
columns: 3,
});
</script>
import LiveUsersWidget from './LiveUsersWidget.vue';
const { columns } = LiveUsersWidget;
Варианты использования:
- Сохранение номеров версий для отдельных компонентов
- Пользовательские флаги для инструментов сборки, чтобы по-разному обрабатывать компоненты
- Добавление кастомного функционала к компоненту, помимо стандартного из Options API и т.д.
#tip