اذهب إلى المحتوى

السؤال

نشر

أحاول الحصول على عنوان IP الخاص بالعميل في Laravel، من السهل الحصول على عنوان IP الخاص بالعميل في PHP باستخدام:

$_SERVER["REMOTE_ADDR"]

إنها تعمل بشكل جيد فيPlain PHP ، ولكن عندما أستخدم نفس الشيء في Laravel ، فإنها تُرجع عنوان IP للخادم بدلاً من IP الخاص بالزائر.

هل هناك طريقة أخرى للحصول عليها في Laravel ؟

Recommended Posts

  • 0
نشر

لارافيل تقدّم إمكانية الحصول على عنوان IP من خلال ال request القادم من العميل إلى الخادم، ويمكن تنفيذ ذلك باتباع عدة طرق:

$clientIP = request()->ip();

dd($clientIP);

أو من خلال الغرض request بشكل مباشر ضمن المتحكّم:

public function index(Request $request)

{

    dd($request->ip());

}

وأيضاً يمكنك استعادة القيمة من \Request::ip() وتخزينها في متحوّل:

$clientIP = \Request::ip();

dd($clientIP);

أو

$clientIP = \Request::getClientIp(true);

dd($clientIP);

 

  • 0
نشر

يمكنك الحصول على عنوان IP عن طريق

$request->ip();

بعد أن تقوم بتعريف الـ request في الـ Controller الذي يحتاج عنوان IP كالتالي:

public function GetAll(Request $request){

	echo $request->ip();

}

 

  • 0
نشر
بتاريخ On 21‏/3‏/2021 at 22:09 قال Sam Ahw:

لارافيل تقدّم إمكانية الحصول على عنوان IP من خلال ال request القادم من العميل إلى الخادم، ويمكن تنفيذ ذلك باتباع عدة طرق:

$clientIP = request()->ip();

dd($clientIP);

أو من خلال الغرض request بشكل مباشر ضمن المتحكّم:

public function index(Request $request)

{

    dd($request->ip());

}

وأيضاً يمكنك استعادة القيمة من \Request::ip() وتخزينها في متحوّل:

$clientIP = \Request::ip();

dd($clientIP);

أو

$clientIP = \Request::getClientIp(true);

dd($clientIP);

 

image.thumb.png.4c55bbcb8e2118023a564482f993a379.png
 

		$user->tokens()->delete();
        $token = $user->createToken('api-token')->plainTextToken;
        $user->last_login_at = now();
        $user->last_login_ip = $request->ip();
        $user->save();
        return response()->json([
        'message' => 'تم تسجيل الدخول بنجاح',
        'user' => $user,
        'token' => $token
        ], 200);

هذا الجزء المسؤول عن تخزين IP وكذلك الامر هو يجلب IP المحلي او الخاص بسيرفر وليس IP المستخدم ذاته
هل ذلك بسبب ان اللمختبر محلي وليس مرفوعاً على موقع الكتروني حقيقي ؟

  • 0
نشر
بتاريخ 19 دقائق مضت قال Abdulhamid Alhazzouri:


 

		$user->tokens()->delete();
        $token = $user->createToken('api-token')->plainTextToken;
        $user->last_login_at = now();
        $user->last_login_ip = $request->ip();
        $user->save();
        return response()->json([
        'message' => 'تم تسجيل الدخول بنجاح',
        'user' => $user,
        'token' => $token
        ], 200);

هذا الجزء المسؤول عن تخزين IP وكذلك الامر هو يجلب IP المحلي او الخاص بسيرفر وليس IP المستخدم ذاته
هل ذلك بسبب ان اللمختبر محلي وليس مرفوعاً على موقع الكتروني حقيقي ؟

بالفعل، بتشغيل خادم لارافل أو apache على جهازك وتُرسل الطلب من نفس الجهاز عبر Postman إلى الرابط 127.0.0.1:8000، فالعميل وهو Postman والخادم وهو Laravel موجودان على نفس الجهاز.

عنوان 127.0.0.1 هو عنوان الـ Loopback Address أي جهازك يكلم نفسه، لذلك كود لارافيل $request->ip() يعمل بشكل سليم ويجلب IP الجهاز الذي أرسل الطلب، وهو جهازك أنت.

عند رفع المشروع على استضافة أو سيرفر حقيقي، ويقوم مستخدم من هاتفه أو كمبيوتره بتسجيل الدخول، دالة $request->ip() ستجلب عنوان الـ IP العام Public IP الفعلي للمستخدم مثل 197.38.x.x أو IPv6.

وللعلم لو استخدمت Cloudflare أو Reverse Proxy مثل Nginx أو Load Balancer أمام السيرفر ستلاحظ تلاحظ أن لارافيل أصبح يُسجل IP خوادم Cloudflare أو 127.0.0.1 بدلاً من المستخدم، هنا يجب  إعداد الـ Trusted Proxies في لارافيل عبر ملف TrustProxies.php أو في bootstrap/app.php في لارافيل 11 ليقرأ لارافيل الترويسة X-Forwarded-For أو CF-Connecting-IP.

  • 0
نشر
بتاريخ منذ ساعة مضت قال Abdulhamid Alhazzouri:
		$user->tokens()->delete();
        $token = $user->createToken('api-token')->plainTextToken;
        $user->last_login_at = now();
        $user->last_login_ip = $request->ip();
        $user->save();
        return response()->json([
        'message' => 'تم تسجيل الدخول بنجاح',
        'user' => $user,
        'token' => $token
        ], 200);

هذا الجزء المسؤول عن تخزين IP وكذلك الامر هو يجلب IP المحلي او الخاص بسيرفر وليس IP المستخدم ذاته
هل ذلك بسبب ان اللمختبر محلي وليس مرفوعاً على موقع الكتروني حقيقي ؟

نعم بالفعل هذا بسبب أنك تستخدم جهاز محلي لديك ولهذا يظهر لك ال ip المحلي وهو 127.0.0.1 وهذا بسب :

  • أن المرسل والمستقبل على نفس الجهاز: لأنك تقوم بإرسال الطلب من المتصفح إلى السيرفر (تطبيق لارافيل) وكلاهما متواجدان فعليا على نفس الجهاز.
  • شبكة ال Loopback (الحلقة المغلقة): عندما تفتح الرابط http://localhost، فإن الطلب لا يخرج من جهازك إلى الراوتر إطلاقا بل يدور داخل الشبكة الداخلية الخاصة بنظام التشغيل وستجد انك تستطيع الوصول للمشروع حتى لو ليس لديك إنترنت. ولذلك يرى لارافيل أن مصدر الطلب هو هذا الجهاز نفسه وعنوانه الدائم هو 127.0.0.1.

فال IP العام (Public IP) أو المحلي (Local IP) مثل 192.168.1.x الخاص بك لا يتم استخدامه إلا عندما يتواصل جهازك مع شبكة خارجية أو أجهزة أخرى على نفس الشبكة.

وهذا الأمر سيختلف عند الرفع على سيرفر خارجى.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...