اعتبارسنجی ورودی کاربر در Node.js با استفاده از Joi
معرفی
در توسعه وب، اعتبارسنجی ورودی کاربر برای اطمینان از یکپارچگی، امنیت و قابلیت اطمینان داده ها بسیار مهم است. توسعه دهندگان Node.js اغلب اعتبار سنجی ورودی را به صورت دستی انجام می دهند که می تواند منجر به کدهای تکراری و مستعد خطا شود. خوشبختانه، کتابخانه Joi یک راه حل قدرتمند و انعطاف پذیر برای اعتبارسنجی مبتنی بر طرحواره ارائه می دهد، فرآیند را ساده می کند و قابلیت نگهداری کد را افزایش می دهد. این مقاله نحوه استفاده از Joi برای اعتبارسنجی ورودی کاربر در برنامههای Node.js را بررسی میکند.
جوی چیست؟
Joi یک کتابخانه اعتبارسنجی طرحواره محبوب برای جاوا اسکریپت است، به ویژه برای برنامه های Node.js مناسب است. این به توسعه دهندگان اجازه می دهد تا طرح ها یا طرحواره هایی را برای اشیاء جاوا اسکریپت ایجاد کنند تا اطمینان حاصل کنند که آنها با قالب ها و محدودیت های مورد انتظار مطابقت دارند. Joi بخشی از hapi
اکوسیستم اما می تواند به طور مستقل در هر پروژه Node.js استفاده شود.
در حال نصب Joi
برای شروع کار با Joi، باید آن را از طریق npm (Node Package Manager) نصب کنید. دستور زیر را در دایرکتوری پروژه Node.js خود اجرا کنید:
npm install joi
استفاده پایه
1. وارد کردن Joi
ابتدا Joi را در فایل Node.js خود وارد کنید:
const Joi = require('joi');
2. ایجاد یک طرحواره
یک طرحواره در Joi ساختار و محدودیت های داده های مورد انتظار شما را تعریف می کند. به عنوان مثال، برای تأیید اعتبار فرم ثبت نام کاربر، ممکن است طرح زیر را داشته باشید:
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')).required(),
email: Joi.string().email({ minDomainSegments: 2 }).required(),
});
این طرح مشخص می کند که:
username
باید یک رشته الفبایی بین 3 تا 30 کاراکتر باشد.password
باید رشته ای باشد که با یک الگوی regex خاص مطابقت داشته باشد (فقط حروف و اعداد، 3 تا 30 کاراکتر).email
باید یک آدرس ایمیل معتبر با حداقل دو بخش دامنه (به عنوان مثال،example.com
).
3. اعتبارسنجی داده ها
برای اعتبارسنجی ورودی کاربر در برابر طرحواره، از validate
روش:
const userInput = {
username: 'johndoe',
password: 'password123',
email: 'johndoe@example.com'
};
const { error, value } = userSchema.validate(userInput);
if (error) {
console.error('Validation failed:', error.details);
} else {
console.log('Validation succeeded:', value);
}
در این مثال، اگر داده های ورودی با طرح مطابقت نداشته باشند، error
شامل جزئیات مربوط به خرابی های اعتبار سنجی است. اگر ورودی معتبر باشد، value
حاوی داده های تایید شده خواهد بود.
استفاده پیشرفته
1. پیام های خطای سفارشی
Joi امکان سفارشی سازی پیام های خطا را برای وضوح بهتر می دهد:
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required()
.messages({
'string.base': 'Username should be a type of text',
'string.empty': 'Username cannot be empty',
'string.min': 'Username should have a minimum length of {#limit}',
'any.required': 'Username is a required field'
}),
// other fields...
});
2. اشیاء تو در تو
Joi می تواند اشیاء تودرتو را نیز تأیید کند:
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
address: Joi.object({
street: Joi.string().required(),
city: Joi.string().required(),
zipCode: Joi.string().length(5).required()
}).required()
});
3. آرایه ها
برای اعتبارسنجی آرایه ها می توانید از array
روش:
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
hobbies: Joi.array().items(Joi.string().valid('reading', 'sports', 'music')).required()
});
4. اعتبار سنجی مشروط
Joi از اعتبار سنجی شرطی برای سناریوهای پیچیده تر پشتیبانی می کند:
const schema = Joi.object({
isAdmin: Joi.boolean(),
accessCode: Joi.when('isAdmin', {
is: true,
then: Joi.string().required(),
otherwise: Joi.forbidden()
})
});
ادغام Joi با Express.js
در یک برنامه Express.js، می توانید از Joi برای اعتبارسنجی بدنه های درخواست، پارامترهای پرس و جو یا پارامترهای مسیر استفاده کنید. در اینجا مثالی از نحوه اعتبارسنجی بدنه درخواست در یک router handler آورده شده است:
const express = require('express');
const app = express();
app.use(express.json());
app.post('/register', (req, res) => {
const userSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
address: Joi.object({
street: Joi.string().required(),
city: Joi.string().required(),
zipCode: Joi.string().length(5).required()
}).required()
});
const { error, value } = userSchema.validate(req.body);
if (error) {
return res.status(400).json({ error: error.details });
}
res.status(200).json({ message: 'Registration successful', data: value });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
نتیجه
اعتبارسنجی ورودی کاربر یک جنبه اساسی در ساخت برنامه های کاربردی ایمن و قابل اعتماد است. Joi با ارائه یک سیستم اعتبار سنجی مبتنی بر طرحواره قوی و انعطاف پذیر این فرآیند را ساده می کند. با تعریف طرحوارههای واضح و ادغام Joi در برنامه Node.js، میتوانید اطمینان حاصل کنید که برنامه شما به طور موثر ورودی کاربر را مدیریت میکند و خطر خطاها و آسیبپذیریهای امنیتی را کاهش میدهد.
با پیروی از دستورالعملها و مثالهای ارائهشده در این مقاله، میتوانید از Joi برای افزایش اعتبارسنجی ورودی در پروژههای Node.js خود استفاده کنید.