Помоги, пожалуйста, разобраться в механизме как работает сам процесс авторизации в связки Node.js (express) + Angular 4.
Как я понимаю, надежнее всего, сделать авторизацию с помощью сессий, где я планирую использовать express-session и mongoDB в качестве хранилища сессий.
До этого этапа все вроде ясно, но как реализовать все дальше? Сессия объявилась и прописалась в базе данных. Но нужно как-то провести проверку и если сессия нету, перенаправить на /login, а если все в порядке, перевести на Angular.
Вот что у меня есть на данный момент. Как лучше и где это реализовать?
server.js
// Get dependencies
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);
// Get our API routes
const api = require('./server/routes/api');
//const session = require('./server/routes/session');
const app = express();
var store = new MongoDBStore(
{
uri: 'mongodb://localhost:27017/buildcore',
collection: 'sessions'
});
// Catch errors
store.on('error', function(error) {
assert.ifError(error);
assert.ok(false);
});
app.use(require('express-session')({
secret: 'This is a secret',
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week
},
store: store,
// Boilerplate options, see:
// * https://www.npmjs.com/package/express-session#resave
// * https://www.npmjs.com/package/express-session#saveuninitialized
resave: true,
saveUninitialized: true
}));
// Parsers for POST data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Point static path to dist
app.use(express.static(path.join(__dirname, 'dist')));
// Set our api routes
//app.use('/*', session);
app.use('/api', api);
// Catch all other routes and return the index file
app.get('*', (req, res) => {
var session = req.session;
res.sendFile(path.join(__dirname, 'dist/index.html'));
});
/**
* Get port from environment and store in Express.
*/
const port = process.env.PORT || '3000';
app.set('port', port);
/**
* Create HTTP server.
*/
const server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port, () => console.log(`API running on localhost:${port}`));
api.js
const express = require('express');
const router = express.Router();
/* GET api listing. */
router.get('/', (req, res) => {
res.send('api works');
});
module.exports = router;