Я строю интернет-магазин, используя 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
}));
Как я уже сказал, это должно сохранить пользователя вбазы данных (или, по крайней мере, выдать ошибку), но это не так.
Спасибо за потраченное время !!