برنامه نویسی

اعتبارسنجی ورودی کاربر در 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 خود استفاده کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا