Всем привет!
Есть такая простая модель юзера
import mongoose, { Schema } from 'mongoose';
import bcrypt from 'bcrypt-as-promised';
const userSchema = new Schema({
login: {
type: String,
required: true,
unique: true,
index: true
},
password: String
});
userSchema.pre('save', async function(next) {
if (!this.isModified('password')) return next();
const salt = await bcrypt.genSalt(10);
this.password = await bcrypt.hash(this.password, salt);
next();
});
userSchema.methods.checkPassword = password => {
return bcrypt.compare(password, this.password);
};
const User = mongoose.model('User', userSchema);
export default User;
и контроллер
import models from '../models/main';
export const signUp = async (request, response, next) => {
const credentials = request.body;
let user;
try {
user = await models.User.create(credentials);
} catch(error) {
return next({
status: 400,
message: error.message
});
}
response.json(user);
};
export const signIn = async (request, response, next) => {
const { login, password } = request.body;
const user = await models.User.findOne({ login });
if (user) {
try {
(await models.User.checkPassword(password));
} catch(error) {
return next({
status: 400,
message: 'Wrong password'
});
}
} else {
return next({
status: 400,
message: 'User not found'
});
}
request.session.userId = user._id;
response.json(user);
};
регистраци работает нормально, пароль хеширует, но при пост запросе уже на signin происходит другой компот, юзера находит, но пароль не совпадает, мне отдает wrong password, не пойму в чём проблема, может быть он сравнивает хеш пароль?