از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش دریافت آدرس IP کاربر در Express.js
بهعنوان یک توسعهدهنده وب، مهم است که سعی کنیم تا حد امکان به حریم خصوصی کاربر احترام بگذاریم، اما این بدان معنا نیست که نیازی به دانستن مکان کلی کاربر نیست. دلایل معتبر زیادی برای نیاز به دانستن مکان آنها بدون نقض حریم خصوصی آنها وجود دارد. مثلا:
- خدماتی که ارائه می کنید باید از قوانین محلی تبعیت کند. Crypto مثال خوبی برای این است – در کشورهای مختلف به طور متفاوتی تنظیم می شود، به این معنی که صرافی های رمزنگاری در برخی کشورها قابل استفاده نیستند.
- میخواهید جستجوها و توصیهها را شخصی کنید. اگر به دنبال یک پیتزافروشی خوب میگردم، خوب است که این سرویس به طور پیشفرض برای یافتن موسسات محلی در منطقه من بدون نیاز به تایپ مکانم باشد.
- ترجیحات زبان مفید خواهد بود که متن برنامه خود را به طور خودکار به زبان محلی کاربر نشان دهید بدون اینکه نیازی به تغییر دستی تنظیمات داشته باشد.
نمونه های بسیار دیگری نیز وجود دارد و اینها تنها تعدادی هستند.
Express.js یکی از محبوب ترین چارچوب های وب در Node.js است و معمولاً برای یافتن آدرس IP کاربر باید از آن استفاده کنید.
آدرس IP به روشهای مختلفی نمایش داده میشود که در اینجا به چند مورد از آنها میپردازیم:
req.connection.remoteAddress
: آدرس IP اتصال کاربر به سرور. این تنها در صورتی کار می کند که سرور شما هیچ پروکسی بین خود و کاربر نداشته باشد.req.headers('x-forwarded-for')
: لیستی از آدرس های IP بین سرور شما و کاربر، به ترتیب. اگر بین سرور و کاربر خود پروکسی داشته باشید این کار مفید است. سمت چپ ترین آدرس IP، آدرس IP کاربر است.req.ip
: این ملک استفاده می کندreq.connection.remoteAddress
مگر اینکهtrust proxy
تنظیم روی تنظیم شده استtrue
. اگر تنظیم شودtrue
، از آن استفاده خواهد کرد چپ ترین آدرس IP درreq.headers('x-forwarded-for')
بجای.req.ips
: این ملک استفاده می کندreq.headers('x-forwarded-for')
اگرtrust proxy
تنظیم روی تنظیم شده استtrue
. به ترتیب این مجموعه ای از آدرس های IP خواهد بود.
توجه داشته باشید که ممکن است نتوانید به آدرس های IP موجود اعتماد کنید req.headers('x-forwarded-for')
، بسته به روی پروکسی که استفاده می کنید می توان آن را توسط مشتری یا پروکسی تنظیم کرد.
اگر از سرویس های دیگری مانند Cloudflare در مقابل سرور خود استفاده می کنید، ممکن است گزینه های دیگری در دسترس داشته باشید. اینها معمولاً با استفاده از هدرهای HTTP ویژه قابل دسترسی هستند. مثلا:
- Cloudflare:
CF-Connecting-IP
- به سرعت:
Fastly-Client-Ip
- Nginx و FastCGI:
X-Real-IP
- آکامای:
True-Client-Ip
بسته به روی اگر به یک آدرس IP دقیق نیاز دارید یا نه، می توانید از تعدادی منبع مختلف با هم استفاده کنید.
به عنوان مثال، برای برخی از خدماتم نیازی به آدرس IP دقیقی ندارم، اما دریافت سرنخ از محل قرارگیری آنها مفید است، بنابراین از منابع مختلف زیادی استفاده میکنم تا یک آدرس IP دقیق دریافت کنم. می توانید از این منابع همراه با موارد زیر استفاده کنید:
exports.getIpFromRequest = req => {
let ips = (
req.headers('cf-connecting-ip') ||
req.headers('x-real-ip') ||
req.headers('x-forwarded-for') ||
req.connection.remoteAddress || ''
).split(',');
return ips(0).trim();
};
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-06 12:16:03