ورود کاربران را با رویکرد ایمن تر از ذخیره کوکی به تنهایی پیگیری کنید.
هنگامی که برنامه وب شما نیاز به “به خاطر سپردن” کاربران دارد، معمولا از یکی از دو مکانیسم استفاده می کند: کوکی ها یا جلسات. کوکی فضای کوچکی از فضای ذخیره سازی در مرورگر است که در آن می توانید داده های مربوط به کاربر مانند تنظیمات برگزیده جستجو را در آن نگهداری کنید. Sessions به شما این امکان را می دهد که اطلاعات حساس را در سرور ذخیره کنید.
نحوه راهاندازی جلسات را در سرور Express که توسط Node.js ارائه میشود، بیابید.
آنچه شما نیاز خواهید داشت
برای دنبال کردن این آموزش، باید Node.js و npm را نصب کنید. هر نسخه اخیر Node.js باید با npm ارائه شود، یک مدیریت بسته برای نصب وابستگی ها.
برای نصب Express و express-session از npm استفاده خواهید کرد. اینها ابزارهایی هستند که برای ایجاد وب سرور و جلسه استفاده خواهید کرد.
Session در Node.js چیست؟
کوکی یک فایل کوچک است که مرورگر شما برای ذخیره داده ها از آن استفاده می کند. میتوانید از کوکیها برای ذخیره دادههای غیر حساس مانند تنظیمات برگزیده جستجو استفاده کنید.
شما نباید داده های حساس (مانند نام کاربری و رمز عبور) را در کوکی ها ذخیره کنید. وقتی مرورگر شما کوکیها را از طریق HTTP ارسال میکند، در مقابل هکرهایی که ممکن است بتوانند آنها را رهگیری کنند، آسیبپذیر هستند. آنها همچنین به صورت متن ساده در رایانه شما ذخیره می شوند، بنابراین هکرها می توانند به طور بالقوه آنها را بررسی کرده و داده های شما را سرقت کنند.
به جای ذخیره داده های حساس به عنوان یک کوکی روی مشتری، باید آن ها را در سرور ذخیره کنید. این باعث می شود از دنیای خارج محافظت شود.
Sessions به شما این امکان را می دهد که داده های حساسی را که برنامه شما برای شناسایی کاربر نیاز دارد ذخیره کنید. به عنوان مثال می توان به نام کاربری، رمز عبور و ایمیل اشاره کرد. آنها امن تر هستند زیرا روی سرور زندگی می کنند نه مشتری.
هر زمان که دادهای دارید که میخواهید در بین درخواستها باقی بماند، آنها را با استفاده از یک جلسه در سمت سرور ذخیره کنید. در بخش زیر نحوه ایجاد یک جلسه را خواهید آموخت.
ایجاد یک جلسه در سرور اکسپرس
Express یک چارچوب وب محبوب برای Node.js است. این به شما امکان می دهد یک برنامه وب سرور راه اندازی کنید که به درخواست های مشتری در شماره پورت انتخابی شما گوش می دهد. شما می توانید مسیرهای API را ایجاد کنید، میان افزار را اعمال کنید و حتی برنامه را به یک پایگاه داده متصل کنید، همه اینها به لطف API های ارائه شده توسط فریم ورک است.
1. یک پروژه Node.js ایجاد کنید
یک پوشه کاملاً جدید برای پروژه خود ایجاد کنید، سپس ابزار خط فرمان و سی دی خود را در آن پوشه راه اندازی کنید.
سپس دستور زیر را برای مقداردهی اولیه یک پروژه Node.js اجرا کنید:
npm init -y
این یک فایل package.json در پوشه ریشه پروژه با تنظیمات پیش فرض ایجاد می کند. فایل package.json برای اجرای اسکریپت های npm.
2. Express و express-session را نصب کنید
شما از Express برای ایجاد برنامه وب سرور استفاده خواهید کرد. و express-session برای ایجاد جلسات در آن برنامه سرور.
در ترمینال، دستور زیر را برای نصب هر دو وابستگی اجرا کنید:
npm i express express-session
پس از نصب هر دو بسته، مرحله بعدی ایجاد سرور خواهد بود.
3. ایجاد Sessions در برنامه
یک فایل به نام App.js در پوشه ریشه پروژه خود ایجاد کنید و وابستگی ها را وارد کنید:
const express = require('express')
const session = require('express-session')
app = express()
بعد، میان افزار جلسه را ثبت کنید. یک شی با ویژگی مخفی (برای امضای کوکی sessionID) و کوکی ارسال کنید.
app.use(
session({
secret: "some secret",
cookie: { maxAge: 30000 },
saveUninitialized: false,
})
);
در اینجا شما بیشترین سن جلسه را 30 ثانیه (30000 میلی ثانیه) تنظیم می کنید. اگر سیستم ورود دارید، تنظیم saveUnitialized به false ضروری است. اگر این کار را انجام ندهید، سرور شما هر بار که کاربر درخواستی ارسال می کند، یک sessionID جدید ایجاد می کند.
بعد، یک مسیر ورود برای تغییر جلسه ایجاد کنید. هنگامی که یک کاربر به این مسیر برخورد می کند، از مشتری انتظار دارید که نام کاربری و رمز عبور را در بدنه درخواست ارسال کند. ابتدا به این مقادیر دسترسی پیدا می کنید و بررسی می کنید که آیا آنها وجود دارند (و آیا کاربر احراز هویت کرده است):
app.post("/login", (req, res) => {
const { username, password } = req.body;
if (username && password) {
if (req.session.authenticated) {
res.json(session);
} else {
if (password === "123") {
req.session.authenticated = true;
req.session.user = { username };
res.json(req.session);
} else {
res.status(403).json({ msg: "Bad credentials" });
}
}
} else {
res.status(403).json({ msg: "Bad credentials" });
}
});
با اولین دستور if، یک بررسی ساختگی انجام می دهید. این بررسی برای اطمینان از این است که فقط در صورت وجود نام کاربری و رمز عبور ادامه می دهید.
بعد، بررسی می کنید که آیا کاربر قبلاً احراز هویت شده است یا خیر. اگر چنین است، جلسه را برای مشتری ارسال کنید. در غیر این صورت، ویژگی احراز هویت شده را روی true تنظیم کنید و نام کاربری را در جلسه ذخیره کنید. سپس آن را برای مشتری ارسال کنید.
با کد بالا، سرور هر کاربری را که درخواستی را به سرور ارسال می کند، به خاطر می آورد. این به این دلیل است که آنها احراز هویت شده اند و جزئیات منحصر به فرد خود (نام کاربری و رمز عبور) در جلسه ذخیره شده اند.
سرور خود را با افزودن کد زیر در پایین App.js راه اندازی کنید:
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
برای آزمایش این مسیر، از یک کلاینت API برای ارسال درخواست به مسیر ورود به سیستمی که ایجاد کردید استفاده کنید. حتما نام کاربری و رمز عبور را در متن درخواست ارسال کنید. در صورت استفاده از Rest Client، درخواست API شما چگونه خواهد بود:
POST http://localhost:3000/login HTTP/1.1
Content-Type: "application/json"
{ username: "Kingsley", password: "123"}
اگر همه چیز خوب پیش برود، شیء زیر را دریافت خواهید کرد:
{
"cookie": {
"originalMaxAge": 30000,
"httpOnly": true,
"path": "/"
},
"authenticated": true,
"user": {
"username": "Kingsley",
"password": "123"
}
}
با این کد دو اتفاق افتاده است. اول، شما در سرور احراز هویت کرده اید. دوم، اکنون جلسه جزئیات ورود شما را دارد، بنابراین سرور اکنون می داند که شما کی هستید. هر زمان که درخواست جدیدی ارسال می کنید، تا زمانی که جلسه منقضی شود و سرور آن را حذف کند، شما را به یاد می آورد.
جلسات تجربه کاربری را بهبود می بخشد
Session ها بخش مهمی از برنامه های Node.js هستند. این به این دلیل است که آنها به شما اجازه می دهند در بسیاری از درخواست ها و پاسخ ها حالت تعامل را حفظ کنید. جلسات به ویژه برای برنامه هایی که نیاز به ورود به سیستم دارند بسیار مهم هستند.
از جلسات در برنامه پشتیبان خود برای پیگیری داده های خاص کاربر استفاده کنید. نمونه ای از این داده ها مواردی است که کاربر شما به سبد خرید اضافه کرده است.
بدون جلسات، شما باید یک ذخیره داده جداگانه برای هر کاربر در برنامه خود داشته باشید. این امر ناکارآمد خواهد بود و پیچیدگی برنامه را افزایش می دهد.
Express.js جلسات، مسیریابی و موارد دیگر را ساده می کند
Express.js محبوب ترین چارچوب وب Node.js است که در حال حاضر استفاده می شود. این ابزارها و کتابخانه های زیادی را برای ایجاد برنامه های کاربردی پشتیبان فراهم می کند و کتابخانه express-session تنها یکی از آنهاست.
اگر می خواهید از Node.js برای توسعه وب باطن استفاده کنید، Express را بررسی کنید.