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

السؤال

نشر

أقوم باستخدام Broadcast في لارافيل مع pusher للتعامل مع اتصالات من جهتين (ويب و api). 

كيف يمكن إجراء أكثر من تحقق authentication للصفحات التي يتم فيها الاتصال مع pusher؟ ففي حال تمّت زيارة الصفحة من الويب أو من API يتم التحقق من نفس الشرط أو guard.

Broadcast::routes(['middleware' => 'web']);

Broadcast::routes(['middleware' => 'auth:api']);

ولكن الدمج نفس الروت لا يعمل

 

Recommended Posts

  • 0
نشر

يمكنك إنشاء middleware جديد خاص بال broadcast وربطه مع kernel.php:

'broadcast' => \App\Http\Middleware\Broadcast::class

ثم تعديل broadcast.php ليصبح كالتالي:

public function handle($request, Closure $next)
{
    $web = Auth::guard('web')->user();
    if ($web) {
        return response()->json(\Illuminate\Support\Facades\Broadcast::auth($request));
    }

    return response()->json('Unauthorized.', 500);
}

ثم للمصدر الآخر المختلف عن الويب، يجب إرسال التحقق على الشكل التالي:

Route::post('/guard/broadcast/auth', function(\Illuminate\Support\Facades\Request $req){
    return true;
})->middleware('broadcast');

بحيث يتم استخدام middleware نفسه.

ثم عند إرسال الطلب من جهة المستخدم pusher، يجب الإرسال للقناة التابعة ل guard معيّن:

<script>

let pusher = new Pusher("{{ env('PUSHER_APP_KEY') }}", {
    cluster: 'ar2',
    encrypted: true,
    auth: {
        headers: {
            'X-CSRF-TOKEN': "{{ csrf_token() }}"
        }
    },
    authEndpoint: '{{ env('APP_URL') }}' + '/guard/broadcast/auth',
});

let channel = pusher.subscribe('private-channel.{{ Auth::user()->id }}');

channel.bind('my-event', addMessage);

function addMessage(data) {
    console.log(data);
}

</script>

وبذلك يمكن تحديدها عن طريق تزويد الطلب ب parameter يدعى authEndpoint

authEndpoint: '{{ env('APP_URL') }}' + '/guard/broadcast/auth',

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...