
Lorien Darenya
Ich habe mich kürzlich mit der Laravel-Echo- und Pusher-Kombination von Laravel 5.3 beschäftigt. Ich habe erfolgreich öffentliche Kanäle eingerichtet und bin zu privaten übergegangen. Ich habe Probleme damit, dass Laravel einen 403 von der /broadcasting/auth-Route zurückgibt, egal was ich tue, um zu versuchen, die Aktion zu autorisieren (bis einschließlich der Verwendung einer einfachen return true-Anweisung). Kann mir jemand sagen was ich falsch mache?
App/Providers/BroadcastServiceProvider.php:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
/*
* Authenticate the user's personal channel...
*/
Broadcast::channel('App.User.*', function ($user, $userId) {
return true;
});
}
}
resources/assets/js/booststrap.js:
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'My-Key-Here'
});
window.Echo.private('App.User.1')
.notification((notification) => {
console.log(notification.type);
});
Ich kann das Ereignis und seine Nutzlast in meiner Pusher-Debug-Konsole sehen, es schlägt einfach fehl, sobald es die Authentifizierungsroute trifft.
Fehler 403 /broadcasting/auth mit Laravel-Version > 5.3 & Pusher, Sie müssen Ihren Code in resources/assets/js/bootstrap.js mit ändern
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'your key',
cluster: 'your cluster',
encrypted: true,
auth: {
headers: {
Authorization: 'Bearer ' + YourTokenLogin
},
},
});
Und in app/Providers/BroadcastServiceProvider.php umstellen
Broadcast::routes()
mit
Broadcast::routes(['middleware' => ['auth:api']]);
oder
Broadcast::routes(['middleware' => ['jwt.auth']]); //if you use JWT
Es hat bei mir funktioniert und ich hoffe, es hilft Ihnen.
Ich löse es, indem ich eine Kanalroute erstelle.
Erstellen Sie Ihre Autorisierungskanäle in routes->channels.php
Broadcast::channel('chatroom', function ($user) {
return $user;
});
Siehe Dokumentation: https://laravel.com/docs/5.4/broadcasting#authorizing-channels
Danke

Jakhongir
Ich habe socket.io mit redis gekoppelt und hatte auch ein Problem mit dem 403-Fehler, obwohl es keine Authentifizierungs-Middleware über die /broadcasting/auth-Route gab. Erst nach dem Waschen Laracasts-Lektion Ich habe herausgefunden, dass nur die Kanalautorisierung nicht ausreicht, es sollte immer einen Benutzer geben, und egal, wie Sie den Benutzer authentifizieren und erhalten, indem Sie die Standard-Laravel-Authentifizierung oder einen Token-Algorithmus verwenden – jwt oder irgendetwas anderes.
Der authentifizierte Benutzer wird automatisch aufgelöst und als erster Parameter an die Schließungsfunktionen in der Datei “routes/channels.php” übergeben, sodass Sie die Kanalverfügbarkeit für den aktuell angemeldeten Benutzer überprüfen können

Überprüfen Sie, wie Sie Ihren Kanal autorisieren. Je nach Setup kann das helfen. Aktualisieren Sie Ihren BroadcastServiceProvider mit Folgendem:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes(['middleware' => ['auth:api']]);
require base_path('routes/channels.php');
}
}
Fügt die Auth-API-Middleware zur Verwendung mit Laravel Passport hinzu.

Juan Francisco Andrade
Was für mich funktioniert hat, war die Methode anzuwenden Privatgelände des Laravel Echo-Pakets:
https://laravel.com/docs/5.3/notifications#listening-for-notifications
Echo.private('App.User.1')
.notification((notification) => {
console.log(notification.type);
});

Nurbol Alpysbayev
In meinem Fall war das Problem eine falsche Benutzer-ID:
Echo.private('user.'+CURRENT_USER_ID_HERE)

FerrisBüller
Dies kann passieren, wenn Sie nicht mehr angemeldet sind. Stellen Sie sicher, dass Sie tatsächlich bei der Laravel-App angemeldet sind und Ihre aktuelle Sitzung nicht abgelaufen ist.
Ich habe mich wieder eingeloggt und bei mir hat es funktioniert.
10186800cookie-checkLaravel /broadcasting/auth schlägt immer mit 403-Fehler fehlyes