📮Тест на вход придёт в личку 💥Без никнейма не впустим Правила: https://t.me/sveltejs/764 Доки: https://svelte.dev/docs Паблик: @sveltejs_public Вакансии: @sveltejs_jobs VK: https://vk.com/sveltejs_ru Админы: @stalkerg, @misharodshtein
ИМХО, обычно принято закрытые роуты гонять через проверку…
Читать полностью…Как раз твоя проблема https://www.youtube.com/watch?v=UbhhJWV3bmI
https://github.com/sveltejs/kit/issues/6315
Один из фиксов — вызывать в каждом page server load await parent()
Сегодняшняя фича это новый модуль svelte/reactivity/window
экспортирующий реактивные обёртки баиндингов <svelte:window>
:
<script>
let width = $state();
let height = $state();
</script>
<svelte:window
bind:innerWidth={width}
bind:innerHeight={height}
/>
<p>{width}x{height}</p>
<script>
import { innerWidth, innerHeight } from 'svelte/reactivity/window';
</script>
<p>{innerWidth.current}x{innerHeight.current}</p>
Ну и выше я кинул полную реализацию аунтефикации по svelte way
Читать полностью…/channel/promaidens/31
Читать полностью…https://thecopenhagenbook.com/sessions
Читать полностью…То есть любой xss скриптец сможет утащить токен сессии?
Читать полностью…Не проще ли сделать серверный токен не server?
Читать полностью…Да, у меня все так
Только layout+server+js не вызывается при каждой навигации
Посмотрите как это реализовано в Realworld:
Логин
https://github.com/sveltejs/realworld/blob/master/src/routes/login/%2Bpage.server.js
Хук ставящий locals
https://github.com/sveltejs/realworld/blob/master/src/hooks.server.js
Locals → data
https://github.com/sveltejs/realworld/blob/master/src/routes/%2Blayout.server.js
Logout
https://github.com/sveltejs/realworld/blob/master/src/routes/settings/%2Bpage.server.js
В общем с таким подходом все получилось и работает
В клиентском +layout.svelte использую примерно такой код:
afterNavigate(() => {
const serversideAuthorized =
Cookies.get('websiteurl.authorized') !== undefined
const clientsideAuthorized = $authorized
if (serversideAuthorized !== clientsideAuthorized) {
syncAuthState()
}
})
const syncAuthState = async () => {
const request = await fetch('/api/me')
if (request.ok) {
const response = (await request.json()) as MeResponse
$user = response.authorizedUser
}
}
А как ты запросы делаешь на бэк?
Читать полностью…Но я не использую fetch нигде, кроме как как раз для синхронизации клиентского состояния с серверным через эту куку
Читать полностью…Когда юзаешь свелтовый fetch, можно отслеживать каждый запрос через handlefetch в hooks.server.ts
Читать полностью…Да я так и делаю, но вопрос в том как мне обновлять в этом сторе данные
Читать полностью…Как один из вариантов рассматривал, думаю пока остановлюсь на двух куках
Читать полностью…Хотя хз, типа написать реализацию самому дело парочки строк по факту, но радует что разрабы упростили даже этот момент 😁
Читать полностью…Ладно, не хочу начинать спорить за авторизацию, за совет как правильно сделать в свелте в любом случае благодарю
Читать полностью…Еще раз озвучу проблему: данные о пользователе передаются из корневного layout.server.ts, корневой layout.server.ts при выходе из аккаунта и редиректе на главную не вызывается, что получается? Получается при редиректе на главную у нас на клиенте после софт навигации в сторе остается юзер
Читать полностью…Нет, кука только для сервера
Читать полностью…Нет, http only cookie это мастхев
Читать полностью…Раз уж по другому не выходит
Читать полностью…Ну есть решение лучше?
Читать полностью…Это скорее звучит как костыль))
Читать полностью…А мне уже знаком этот подход с двумя куками, одна для сервера, другая для клиента, все ок
Читать полностью…Только через actions и load,у меня задача чтобы все работало без включенного js, progressive enhancement там и так далее
Читать полностью…Я попробовал добавить depends в корневой лейаут и потом при выходе вызывать invalidate() но так не работает, надо чтобы invalidate вызывался с клиента
Читать полностью…Он перезапускает всю цепочку
Читать полностью…Не буду же я в каждый load каждого page добавлять возвращение юзера
Поэтому добавил это в корневой лейаут
Я завожу authStore для состояния пользователя, только главное не расшарить его на сервере
Читать полностью…