Паспорт не спасает пользователей после регистрации и тоже не выдает ошибку - PullRequest
0 голосов
/ 31 мая 2019

Я строю интернет-магазин, используя nodejs, express и mongoDB.Я использую паспорт и bcrypt для аутентификации, но это не спасает пользователей, а также не выдает никаких ошибок

Я проверял и перепроверил свой код несколько раз за последние несколько дней без какого-либо успеха, и Google можетне можете найти ответ на мою проблему.

https://github.com/Tototomi258/WorkUp-Store здесь вы можете проверить весь проект, но вот некоторый код:

app.js

mongoose.connect('mongodb://localhost:27017/shopping', { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
require('./config/passport')(passport);

app.use(session({secret: 'secretPassword', resave: false, saveUninitialized: false}))
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());

passport.js

const passport = require('passport');
const User = require('../models/user');
const LocalStrategy = require('passport-local').Strategy;

module.exports = function(passport) {
  passport.serializeUser((user, done) => {
    done(null, user.id);
  });

  passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => done(err, user));
  });

  passport.use('local-signup', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
  }, (req, username, password, done) => {
    process.nextTick(function() {
      User.findOne({'email' : email}, (err, user) => {
        if (err) {return done(err);}
        if (user) {return done(null, false, {message: 'El email ya está en uso'});}

        const newUser = new User();
        newUser.local.username = email;
        newUser.local.password = newUser.encryptPassword(password);
        newUser.save((err, result) => {
          if (err) {return done(err);}

          return done(null, newUser);
        });
      });
    });
  }));
}

user.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const bcryptjs = require('bcryptjs');

const UserSchema = new Schema({
  username: {type: String, required: true, unique: true},
  password: {type: String, required: true}
});

UserSchema.methods.encryptPassword = (password) => {
  return bcryptjs.hashSync(password, bcryptjs.genSaltSync(8), null);
}

UserSchema.methods.validPassword = (password) => {
  return bcryptjs.compareSync(password, this.local.password);
}

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

index.js

router.get('/user/signup', (req, res, next) => {
  let messages = req.flash('error');
  res.render('user/signup', { csrfToken: req.csrfToken(), messages: messages, hasErrors: messages.length > 0 });
});

router.post('/user/signup', passport.authenticate('local-signup', {
  succesRedirect: '/user/profile',
  failureRedirect: '/user/signup',
  failureFlash: true
}));

Как я уже сказал, это должно сохранить пользователя вбазы данных (или, по крайней мере, выдать ошибку), но это не так.

Спасибо за потраченное время !!

...