Я пытаюсь создать приложение, которое может публиковать данные как через ajax, так и через традиционные запросы форм.Я удивлен отсутствием информации, которую я нахожу в Интернете по этой теме.Полагаю, в наши дни мы все предполагаем, что у нас есть доступ к JS на стороне клиента?
Я пошел с экспресс-сессией, но разочарован тем, насколько сложно определить, что на самом деле происходит.Из того, что я могу понять, это кеширование данных cookie на клиенте и автоматическое включение их в запросы?Тогда можно ли предположить, что этот формат НЕ будет работать без поддержки javascript на стороне клиента?
При такой форме:
<form method="post" action="/create">
<input name="value1" onChange={this.handleInput} value={this.state.value1} />
<button onClick={this.submitForm}
</form>
Мои запросы, отправленные через ajax, будут проходить аутентификацию (из-зачтобы иметь данные сеанса):
event.preventDefault();
postUrl(`/create`, {value1: this.state.value1})
.then(jsonRes => {
// works
});
выбирается промежуточным программным обеспечением, использующим экспресс-сеанс и паспорт:
module.exports.secured = (loginUrl = "/employers") => {
return (req, res, next) => {
if ( (req.isAuthenticated()) ) { return next(); }
req.session.returnTo = req.originalUrl;
res.redirect(loginUrl);
return next();
};
};
, которые защищают довольно простой маршрут API для создания:
router.post('/create', secured(), (req, res) => {
Я думаю, что даже если JS включен, я мог бы обработать запрос на этом маршруте, но проблема заключается в аутентификации.
Что я могу сделать, чтобы мои данные сеанса пересылались вэти запросы не-js?
Я помню, что в традиционных веб-стеках, таких как Rails или PHP, какой-то токен выводится в форму в скрытом поле или в действии при рендеринге.Если это сработает, кто-нибудь знает, как получить «жизненно важные данные», так сказать, из экспресс-сеанса для отправки в качестве токена?Не возможно?
Просматривая req.cookies
или req.session
объекта req, который анализируется при рендеринге на сервере, я не вижу ничего, что было бы полезно для этого.