@whiteleaf

Правильно ли я делаю авторизацию?

я пытаюсь сделать авторизацию где доступ предполагается только для зарегистрированных пользователей.

Я хотел бы услышать мнение профессионалов. Я делаю правильно или в корне нужно все делать не так?

Я использую express-session, а в качестве хранилища для сессий, я использую Mongodb.

Далее у меня по коду идет строка, которая переадресовует все, кроме api, запросы на страницу index.html, где уже 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 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')));
app.use(express.static(path.join(__dirname, 'views')));

// Set our api routes
app.use('/api', api);

var user;

function isAuthenticated(req, res, next) {

  user = res.session;
  console.log(user);
  //if()

  // do any checks you want to in here

  // CHECK THE USER STORED IN SESSION FOR A CUSTOM VARIABLE
  // you can do this however you want with whatever variables you set up
  if (req.user.authenticated)
    return next();

  // IF A USER ISN'T LOGGED IN, THEN REDIRECT THEM SOMEWHERE
  res.redirect('/login');
  //res.redirect('/login').sendFile(path.join(__dirname, 'dist/login.html'));
}

// Catch all other routes and return the index file
app.get('*', isAuthenticated, (req, res) => {
  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;
  • Вопрос задан
  • 469 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Abcdefgk
Слушайте, Коган в своём стареньком скринкасте про node.js на learn.javascript.ru знакомит народ с Нодой, в том числе, на примере изготовления локальной авторизации - просто найдите скринкаст, изучите и сделайте так же. (и чтоб два раза не вставать - спасибо, всё таки, ему за лучший в мире учебник JavaScript)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы