A
A
Aleksandr19_932019-08-17 15:01:43
Node.js
Aleksandr19_93, 2019-08-17 15:01:43

Node + express user authorization?

0
I started learning Node.js and started doing user authorization, but got stuck. Here is what I want to implement:
- the user logs in
- redirects him to the user's page - the user
's vacation data is displayed on the user's page
But I'm stuck on the last point. How can I pass req.session.user to get request or is there another way? Here is my code:
index.js

const express = require( 'express' );
const db = require( './db' );
const session = require('express-session')
const MongoStore = require('connect-mongo')(session)
const bodyParser = require( 'body-parser' );
const config = require( '../etc/config.json' );
const cors = require( 'cors' );

const controller = require( './controller/controller' );

const app = express();

app.use(session({
  store: new MongoStore({ url: 'mongodb://localhost/employees' }),
  secret: 'QwqYTDHJGDhGHGSDJghhsdghjGJHGdJH',
  saveUninitialized: false,
  resave: false
}));

app.use( bodyParser.json() );
app.use( express.static(__dirname) );
app.use( cors({ origin: '*'}) );

db.connect('mongodb://' + config.db.host + ':' + config.db.port + '/' + config.db.name , {
  useNewUrlParser: true
}, function(err){
    if(err) return console.log(err);
    app.listen(config.serverPort, function(){
        console.log("Сервер ожидает подключения...");
    });
  });
  function loadUser(req, res, next) {
    controller.checkUser(req.body)
      .then(function(user){
        if(user){
          req.session.user = {id: user._id, name: user.login}
          res.send(req.session.user)
        }
      })
      .catch(function(error){
        return next(error)
      })

  }

  app.get("/", ( req, res ) => {
    controller.vacationList().then( data => res.send(data) );
});

app.post("/", ( req, res ) => {
  controller.vacationCreate(req.body).then( data => res.send(data) );
});

app.put('/:id', function (req, res){
  controller.vacationChange(req.params.id, req.body).then( data => res.send(data) );   
});

app.delete("/:id", ( req, res ) => {
    controller.vacationDelete(req.params.id).then( data => res.send(data) );
});

app.post('/user', loadUser);

controller.js
const User = require( '../models/User' );
const ObjectID = require( 'mongodb' ).ObjectID;

exports.vacationList = function(userData) {
    console.log(userData)
    return User.find();
};

exports.vacationCreate = function(data) {
    const user = new User ({
        login: data.login,
        password: data.password,
    });
    return user.save();
};

exports.vacationDelete = function(id) {
    return User.findById(id).remove();
};

exports.checkUser = function(userData) {
    return User
        .findOne({login: userData.login, password: userData.password})
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Alexander, 2019-08-18
@AlexanderK-A

Good day!
Apparently, you need to return some kind of html page back to the user, and pre-render what you need on this page.
To do this, you can use one of the many template engines.

res.render(viewName, {userData: req.session.user});

A
Aleksandr19_93, 2019-08-20
@Aleksandr19_93

Problem solved, the error was on the front-end side

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question