ExpressJS: Как условно начать сессию? - PullRequest
0 голосов
/ 23 мая 2019

Это может звучать как очень простой / глупый вопрос, но я ничего не могу найти в Интернете.

Я использую Express 4 с NodeJS и пытаюсь реализовать сессию, используя express-session middleware . Я хочу использовать сеанс, чтобы разрешить / запретить определенные маршруты для разных пользователей.

Я знаю, что могу использовать сеанс на условном маршруте:

const express = require('express');
const Router = require('express').Router;
const router = new Router();

const session = require('express-session');
const sessioning = session({...});

router.post('/login', sessioning, (req, res) => {

});

Но это не то, что я пытаюсь сделать. Это запустит сеанс даже при неудачной попытке входа в систему.

Я пытаюсь начать сеанс только после успешной попытки входа в систему:

const express = require('express');
const Router = require('express').Router;
const router = new Router();

const session = require('express-session');


router.post('/login', (req, res) => {

  /* ... Login validations */

  if (login === 'success'){

    /* ... start session */

  }

  res.json({...});

});

Чтобы я мог запретить неаутентифицированным пользователям защищенные маршруты:

router.get('/protected', (req, res) => {

  if (!req.session){
    res.status(401);
    res.end();
    return;
  }

  /* ... */

});

Если я устанавливаю сеанс непосредственно на защищенных маршрутах, то он не может проверить, вошел ли пользователь в систему.

Может кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 23 мая 2019

Это не отвечает на ваш основной вопрос, но решает вашу (на первый взгляд) главную проблему:

Если я устанавливаю сеанс непосредственно на защищенных маршрутах, то он не может проверить, вошел ли пользователь в систему.

Вы можете прикрепить переменную к объекту req.session, чтобы проверить, вошел ли пользователь в систему.

Установите loggedIn в статусе вашего login маршрута

router.post('/login', (req, res) => {
  /* ... Login validations */
  if (login === 'success'){

    req.session.loggedIn = true;
  }
  // ...
});

И установите промежуточное ПО, которое проверяет, вошел ли пользователь в систему, и защищает ваши маршруты.

function checkLoggedIn(req, res, next) {
  if (req.session.loggedIn)
    next();
  else
    res.redirect('/login')
}

// Your protected route
router.get('/protected', checkLoggedIn, (req, res) => {
  // ...
});
...