Mahmoud Alrashidi نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 لدي المسار التالي: Route::post('threads/{thread}/replies', [ReplyController::class, 'store']); التابع store بهذا الشكل: <?php class ReplyController extends Controller { public function store(Thread $thread) { $thread->addReply([ 'body' => \request('body'), 'user_id' => auth()->id() ]); return back(); } } و نموذج لإضافة تعليق على موضوع بهذا الشكل: <div class="row justify-content-center mt-3"> <div class="col-md-8"> <form action="{{ $thread->path . "/replies" }}" method="post"> @csrf <div class="form-group"> <textarea name="body" class="form-control" rows="5" placeholder="Have something to say?"></textarea> </div> <button type="submit" class="btn btn-secondary">Post</button> </form> </div> </div> كل شيء يعمل الآن، ما أريده هو حماية وصول الزوار للمسار و أن لا يتم عرض نموذج إضافة تعليق لهم و أن يتم عرض رابط للتوجيه إلى صفحة تسجيل الدخول في هذه الحالة. 1 اقتباس
0 سمير عبود نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 يُمكن حماية المسار بإستخدام الطبقة الوسيطة أو الmiddleware المُسماة auth بهذا الشكل: Route::post('threads/{thread}/replies', [ReplyController::class, 'store'])->middleware('auth'); أو يُمكنك عمل ذلك في المُتحكم ReplyController لأنه سيعطيك حرية أكثر من خلال الباني: <?php class ReplyController extends Controller { public function __construct() { $this->middleware('auth')->only('store'); } } من خلال التابع only يُمكنك تحديد التوابع التي تريد تطبيق الmiddleware عليها. أما في جزء العرض فيُمكنك إستخدام توجيه مُحرك blade الذي يُكتب: @auth أو إستخدم شرط بسيط للتحقق من أن المُصادقة مُحققة: @if(auth()->check()) بهذا الشكل ككل: @auth <div class="row justify-content-center mt-3"> <div class="col-md-8"> <form action="{{ $thread->path . "/replies" }}" method="post"> @csrf <div class="form-group"> <textarea name="body" class="form-control" rows="5" placeholder="Have something to say?"></textarea> </div> <button type="submit" class="btn btn-secondary">Post</button> </form> </div> </div> @else <p class="text-center mt-3">Please <a href="{{ route('login') }}">sign in</a> to participate in this discussion.</p> @endauth و هكذا سيتم عرض النموذج إلا في حالة كان هناك مُستخدم مُصادق عليه أما إن كان زائر سيتم عرض رابط يُخبره بضرورة تسجيل الدخول لإضافة تعليق. 2 اقتباس
0 بلال زيادة نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 يمكن باستخدام Middleware منع و توجبه الزوار و الأعضاء إلى أي صفحة تريدها فمثلا في حالتك هذه ممكن أنشاء middleware باستخدام الأمر التالي php artisan make:middleware UserAuth أو يمكن زيارة الصفحة الخاصة بالتوثيق هنا ثانيا عند تنفيذ هذا الأمر في command سيقوم بأنشاء ملف خاص لِ Middleware في المسار التالي app\Http\Middleware ستجد الملف التالي UserAuth.php في دالة handle ممكن تضع أي شرط لإكمال الدخول إلى route محدد أو توجيه الزائر أو العضو إلى صفحة معينة ما دام الشرط غير صحيح فمثلا public function handle($request, Closure $next) { if (auth()->guard('web')->user()) { return $next($request); } else { return redirect('/404'); } } ومن ثم نذهب للملف التالي في المسار app/Http/Kernel.php ونقوم بوضع مسار Middleware الذي قمنا بأنشائه داخل المصوفة $routeMiddleware 'userauth' => \App\Http\Middleware\UserAuth::class, ومن ثم في ملف الخاص بِ routes نضع في route الذي نريد منع الأعضاء من الدخول إليه Route::post('threads/{thread}/replies', [ReplyController::class, 'store'])->middleware('userauth'); وهكذا تكون عملية توجيه الاعضاء حسب شرط معين, يمكنك زيارة التوثيق الخاص Laravel في الرابط إعلاه. 1 اقتباس
السؤال
Mahmoud Alrashidi
لدي المسار التالي:
التابع store بهذا الشكل:
و نموذج لإضافة تعليق على موضوع بهذا الشكل:
كل شيء يعمل الآن، ما أريده هو حماية وصول الزوار للمسار و أن لا يتم عرض نموذج إضافة تعليق لهم و أن يتم عرض رابط للتوجيه إلى صفحة تسجيل الدخول في هذه الحالة.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.