Создание содержимого с помощью JavaScript (Netlify Identity): содержимое мигает при медленных соединениях, как загрузить его только после проверки входа в систему?
Я не являюсь разработчиком веб-приложений, и я хотел бы спросить о передовых методах сбора контента с веб-сайтов.
Я готовлюсь к развертыванию документации, созданной с помощью mkdocs. Он использует Netlify Identity, потому что с этим аутентификация Github доступна без какой-либо кодировки.
Мое текущее решение: я добавил в голову скрипт Netlify Identity и кнопку входа / выхода из системы с помощью дополнений к шаблонам в mkdocs, а затем создал статический документ /login/ (который автоматически выбирается в mkdocs, но не генерируется с шаблоном),
В стандартном шаблоне есть перенаправление JS в / login /, если пользователь не вошел в систему:
if (window.netlifyIdentity) {
window.netlifyIdentity.on("init", user => {
if (!user) {
document.location.href = "/login/";
}
});
}
На статической странице происходит перенаправление на / только сразу после входа пользователя:
if (window.netlifyIdentity) {
window.netlifyIdentity.on("init", user => {
if (!user) {
window.netlifyIdentity.on("login", () => {
document.location.href = "/";
});
}
});
}
Я надеюсь, что это разумный способ сделать это. В документах не хранится ничего критического, но я бы не хотел, чтобы этот контент был открыт.
Но я заметил, что при медленном соединении перенаправление занимает секунду или две, поэтому при обращении к глубокому URL-адресу контент мигает на экране перед входом в систему.
Что можно сделать, чтобы остановить это и загрузить контент только после проверки входа в систему?
2 ответа
Это не сработает, как вы хотите, и небезопасно.
Если бы я хотел читать ваш контент без учетной записи, я мог бы просто отключить JavaScript в своем браузере (несколько щелчков мышью), и ваш сайт загрузился бы, но перенаправление никогда не запустилось бы.
Независимо от того, что JavaScript включен, он работает так, что браузер загружает страницу, затем загружает любые ресурсы (включая скрипты) и, наконец, запускает любые скрипты. Нет способа изменить это. Конечно, в быстрой системе пользователь может не воспринимать задержку, так как задержка очень короткая, но всегда есть задержка. Так работают браузеры.
Если вы не хотите, чтобы ваши пользователи имели доступ к информации до тех пор, пока они не вошли в систему, то вы не должны отправлять информацию до тех пор, пока они не войдут в систему. Другими словами, вам необходимо настроить сервер так, чтобы страница не отправлялась. до тех пор, пока не получит подтверждение, что пользователь имеет разрешение на получение этой информации. То, как вы это сделаете, зависит от того, какой сервер вы используете, помимо прочего, что будет предметом отдельного вопроса.
Я знаю, что это старый пост, но вы можете использовать функции netlify в сочетании с файлом перенаправления netlify.
Вам нужно будет установить роль пользователя при регистрации с использованием метаданных, вы можете сделать это с помощью функции netlify, которая подключена к идентификатору netlify, подробнее здесь.
Создайте функцию с именем
identity-signup.js
когда пользователь регистрируется, эта функция вызывается автоматически.
exports.handler = async (event) => {
const { user } = JSON.parse(event.body)
// you could do something with the user here: eg console.log(user.email)
// or using stripe: const customer = await stripe.customers.create({ email: user.email });
return {
statusCode: 200,
body: JSON.stringify({
app_metadata: {
roles: ['free']
}
})
}
}
Когда у вас есть роль, вы можете просто создать
_redirects
файл так:
/authedcontent/* 200! Role=free
/authedcontent/ / 404
Позже вы можете расширить функцию netlify, чтобы сохранить информацию о пользователях во внешней базе данных или, возможно, настроить подписку на чередование.
Единственное предостережение в том, что для этого требуется платная учетная запись netlify.