Экспресс-управление сессиями NodeJs - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть этот вопрос здесь, я пытался искать в Интернете и даже здесь, на Stackoverflow, но я не получаю точное решение, которое мне нужно. Я создаю какое-то приложение, которое управляется базовой аутентификацией, где пользователю необходимо войти в систему, когда они вошли в систему. Я хочу sendFile() их, которые будут домашней страницей, которую я хочу на домашней странице, чтобы иметь возможность проверить, установлен ли сеанс затем, если нет, тогда перенаправьте для входа в систему, используя NodeJS, Javascript, а также Express.

Это, если бы это было на PHP, было похоже на это:

session_start();
if(!isset($_SESSION['user_id'])
     location('header: login.php')
<html>
      <?php
         echo "Your user id is: ".user_id;
      ?>
</html>

В основном я хочу установить в сеансе идентификатор и иметь возможность читать его на домашней странице / других страницах, не делая этого только на сервере, но также и в home.html.

1 Ответ

0 голосов
/ 03 сентября 2018

Возможно, вы не хотите использовать sendFile, вместо этого вы, вероятно, хотите использовать res.redirect, чтобы отправить пользователя в другую конечную точку. Эта конечная точка может быть вашей домашней страницей, например, но обычно лучше использовать правильный экспресс-рендеринг, а не sendFile, если вы не пытаетесь сделать что-то вроде предоставления пользователю возможности загрузить файл BLOB-объекта.

Вы можете настроить конечную точку, такую ​​как:

const express = require('express');
const app = express();

// setup render system here...

app.use('/', (req, res) => {
    res.render('home');
});

Это вызовет рендер на домашнем шаблоне. Для настройки движка шаблонов вы можете использовать что-то вроде express-hbs или другие движки рендеринга. Это позволит вам вставить значения в HTML перед его возвратом, что может быть полезно, если вы хотите добавить сообщение об ошибке.

После настройки вы можете создать шаблон, который называется что-то вроде home.hbs (местоположение и расширение будут зависеть от вашей библиотеки и настроек).

Затем вы можете использовать экспресс-сеанс для проверки сеанса.

app.use('/secured', (req, res) => {
    if (req.session) {
        // We have a session! Now you can validate it to check it's a good session
    } else {
        // No session at all, redirect them to the home screen.
        // You might want to make this the login screen instead.
        res.redirect('/');
    }
});

Некоторый окончательный демонстрационный код может выглядеть следующим образом

const express = require('express');
const app = express();

// Setup express session...
const session = require('express-session');

app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}));

// Setup the vie engine...
var hbs = require('express-hbs');

// Use `.hbs` for extensions and find partials in `views/partials`.
app.engine('hbs', hbs.express4({
  partialsDir: __dirname + '/views/partials'
}));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');

// Place a file called `views/home.hbs` in the views folder at the top level of your project.
// Fill it with some html, all html is valid, handlebars just adds additional features for you.

// A public route which requires no session
app.use('/', (req, res) => {
    // Renders "views/home.hbs"
    res.render('home');
});

// A secured route that requires a session
app.use('/secured', (req, res) => {
    if (req.session) {
        // We have a session! Now you can validate it to check it's a good session
    } else {
        // No session at all, redirect them to the home screen.
        // You might want to make this the login screen instead.
        res.redirect('/');
    }
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...