Fix AdminJS: no crash on empty password, proper validation errors

This commit is contained in:
treamz 2026-03-22 00:52:43 +03:00
parent 27ad078e07
commit 1236a27c49

View File

@ -120,11 +120,19 @@ async function setupAdmin(app) {
actions: {
edit: {
before: async (request) => {
const pw = request.payload?.password?.trim();
const pw2 = request.payload?.password_confirm?.trim();
const pw = (request.payload?.password || '').trim();
const pw2 = (request.payload?.password_confirm || '').trim();
if (pw) {
if (pw !== pw2) throw new Error('Пароли не совпадают');
if (pw.length < 6) throw new Error('Пароль минимум 6 символов');
if (pw2 && pw !== pw2) {
request.payload.errors = request.payload.errors || {};
request.payload.errors.password_confirm = { message: 'Пароли не совпадают' };
return request;
}
if (pw.length < 6) {
request.payload.errors = request.payload.errors || {};
request.payload.errors.password = { message: 'Минимум 6 символов' };
return request;
}
const bcrypt = require('bcrypt');
request.payload.password_hash = await bcrypt.hash(pw, 10);
}
@ -135,11 +143,23 @@ async function setupAdmin(app) {
},
new: {
before: async (request) => {
const pw = request.payload?.password?.trim();
const pw2 = request.payload?.password_confirm?.trim();
if (!pw) throw new Error('Пароль обязателен');
if (pw !== pw2) throw new Error('Пароли не совпадают');
if (pw.length < 6) throw new Error('Пароль минимум 6 символов');
const pw = (request.payload?.password || '').trim();
const pw2 = (request.payload?.password_confirm || '').trim();
if (!pw) {
request.payload.errors = request.payload.errors || {};
request.payload.errors.password = { message: 'Пароль обязателен' };
return request;
}
if (pw2 && pw !== pw2) {
request.payload.errors = request.payload.errors || {};
request.payload.errors.password_confirm = { message: 'Пароли не совпадают' };
return request;
}
if (pw.length < 6) {
request.payload.errors = request.payload.errors || {};
request.payload.errors.password = { message: 'Минимум 6 символов' };
return request;
}
const bcrypt = require('bcrypt');
request.payload.password_hash = await bcrypt.hash(pw, 10);
delete request.payload.password;