Информация о пользователе не заполняется в БД, а console.log не показывает вывод - PullRequest
0 голосов
/ 01 апреля 2020

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

  1. Реестры пользователей> Затем перенаправляется на страницу входа (информация пользователя сохраняется в БД вместе с сгенерированным ключом API)

  2. Как только пользователь зарегистрирован, он перенаправляется на страницу входа в систему.

  3. Он входит в систему, затем отображается его панель управления. Панель инструментов показывает их информацию, а также ключ API.

Проблема, с которой я сталкиваюсь, заключается в том, что при вводе информации о пользователе ничего не происходит (она реагирует так, как если бы она взяла информацию). Страница обновляется, информация о пользователе не заполняется в БД, и console.log ничего не показывает.

Мой код: сервер. js

require('dotenv').config()

const express = require('express') ;
const app = express();
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const flash = require('req-flash');
const session = require('express-session');
const passport = require('passport');

mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true , useUnifiedTopology: true })
const db = mongoose.connection
db.on('error', (error) => console.error(error))
db.once('open', () => console.log('Connected to Database'))

app.use(express.json());
app.set('view-engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({ secret: 'Test123' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
const articlesRouter = require('./routes/articles')
app.use('/articles', articlesRouter)

const userRouter = require('./routes/users')
app.use('/register', userRouter)

app.use(express.urlencoded({ extended: false }))

app.get('/', (req, res) => {
    //res.render('index.ejs')
    res.redirect('/login');
})

app.get('/login', (req, res) => {
    res.render('login.ejs')
})
const pagesRouter = require('./routes/pages');
app.use('/dashboard', pagesRouter);

app.get('/register', (req, res) => {
    res.render('register.ejs')
})

app.listen(3000, () => console.log('Server Started'))

маршруты пользователя. js :

const express = require('express');
const router = express.Router();
const Users = require('../models/users');
const UsersConstroller = require('../controllers/users.controller');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const uuidv4 = require('uuid/v4');
var expressValidator = require('express-validator');
const flash = require('req-flash');

router.use(expressValidator());

//Register - POST
router.post('/', (req, res) => {
    var firstName = req.body.firstName;
    var lastName = req.body.lastName;
    var email = req.body.email;
    var password = req.body.password;

    //validations
    req.checkBody('firstName', 'Your First Name is Required').notEmpty();
    req.checkBody('lastName', 'Your Last Name is Required').notEmpty();
    req.checkBody('email', 'A valid email is required').isEmail();
    req.checkBody('password', 'An Account Passowrd Is Required').notEmpty();

    var errors = req.validationErrors();
    if (errors) {
        res.render('register.ejs', {
            errors:errors 
        });
    } else {
        const randomKey = uuidv4();
        var newUser = new Users({
            firstName: firstName,
            lastName: lastName,
            email: email,
            password: password,
            apiKey: randomKey.replace(/-/g,'')
        });
        newUser.save(function(err, user) {
            if(err) throw(err);
            console.log(user);
        });

        req.flash('success_message', "You are now registered!");
        res.redirect('/login');
    }
});

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
},
function(email, password, done){
    UsersConstroller.getUserByEmail(email, function(err, _user){
        if(err) throw err;
        if(!_user){
            return done(null, false, {message: 'Unknown Email Address'});
        }
        const ismatch = _user.validPassword(password, _user.password);
        if(ismatch){
            return done (null, _user); 
        } else {
            return done(null, false, {message: 'Invalid Passowrd'});
        }
    });
}));

passport.serializeUser(function(user, done){
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    UsersConstroller.getUserById(id, function(err, user) {
        done(err, user) 
    });
}); 

router.post('/login', passport.authenticate('local', {
        successRedirect: '/dashboard',
        failureRedirect: '/login',
        session:true,
        successFlash: 'Welcome',
        failureFlash: 'Invalid Email or Passowrd!'
    }), function(req, res) {
    res.redirect('/');
});

/*router.post('/login', function(req, res) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { 
            return next(err); 
        }else if (!user) { 
            return res.redirect('/login'); 
        }else{
            res.cookie('api_key', user.apiKey);
            return res.redirect('/dashboard');
        }
    });
});*/

router.get('/logout', function(req, res) {
    req.logout();
    req.flash('Success_message', 'You are now logged out!')
    res.redirect('/');
});

module.exports = router 

пользователей модели. js

const mongoose = require('mongoose')
const bcrypt = require('bcrypt')

var userSchema = new mongoose.Schema({
    firstName: String, 
    lastName: String, 
    email: String, 
    password: String, 
    permissionLevel: Number, 
    created: Date, 
    apiKey: String
});

userSchema.methods.generateHash = function(cb) {
  this.password = bcrypt.hashSync(this.password, bcrypt.genSaltSync(10), cb);
  return cb();
};

userSchema.methods.validPassword = function(password, hash) {
  return bcrypt.compareSync(password, hash);
};

userSchema.post("save", function(_doc, next) {
  _doc.password = undefined;
  return next();
});

userSchema.pre("save", function(next) {
  this.generateHash(next);
});

module.exports = mongoose.model('User', userSchema);

Я подозреваю, что это как-то связано с моей коллекцией пользователей, в которую я пытаюсь внести данные. Его кодируется только в модели пользователей, и нигде больше. Но я не уверен.

Любая помощь будет принята с благодарностью.

...