Клиент Laravel Echo не может быть аутентифицирован

Я вижу, что этот вопрос задавался несколько раз, но ни один из ответов не работает, поэтому я прошу помощи и некоторого понимания.

Я использую laravel echo и redis для трансляции событий. Мой эхо-сервер laravel отлично работает, Redis работает хорошо.

Когда я перезагружаю свою веб-страницу, я получаю эту ошибку в терминале сервера laravel-echo:

⚠ [4:49:19 PM] - qg4WSWl5YusQY8hJAAAA could not be authenticated to private-test-channel.1
{"error":"Unauthenticated."}
Client can not be authenticated, got HTTP status 401

и я ходил взад и вперед с этим, чтобы сделать с этим, и ничто не помогает с этим.

Вот мой app.js

import Echo from "laravel-echo";

window.Echo = new Echo({
  broadcaster: 'socket.io',
  host: window.location.hostname + ':6001'
});

Вот мой echo.js

  window.Echo.private('test-channel.{{Auth::user()->id}}')
    .listen('EventName', function(event) {
      console.log('data', event);
  });

My BroadcastServiceProvider

public function boot()
{
  //broadcast routes middleware
  Broadcast::routes(['middleware' => ['auth', 'web']]);

  /*
  * Authenticate the user's personal channel...
  */
  Broadcast::channel('App.User.*', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
  });

  //require all base channels
  require base_path('routes/channels.php');
}

это мой larave-echo-server.json

{
    "authHost": "http://127.0.0.1:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "570453f474365cc8",
            "key": "4baec74e662696009e7857e49d3364c4"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": "127.0.0.1",
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": ""
}

Когда я запускаю свое событие, я получаю событие в консоли, но пользователь по какой-то причине не может быть аутентифицирован, и я не могу понять это.


person z0mbieKale    schedule 29.09.2017    source источник
comment
Есть какие-либо решения, я также столкнулся с той же проблемой   -  person Aravind Srinivas    schedule 26.07.2018


Ответы (1)


Вы видели в route/channels.php разрешение?

это ссылка для объяснения: https://laravel.com/docs/5.5/broadcasting#authorizing-channels Я вижу, что вы поставили BroadcastServiceProvider

Broadcast::channel('App.User.*', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
  });

Но в route/channels.php команда по умолчанию:

Broadcast::channel('App.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

может быть, это создает какой-то конфликт или проблему

person LorenzoBerti    schedule 29.09.2017
comment
Вы удалили код внутри BroadcastServiceProvider и поместили разрешение в channels.php, как говорится в документации? Вы можете редактировать с помощьюchannels.php? Вы импортировали ‹script src=//{{ Request::getHost() }}:6001/socket.io/socket.io.js›‹/script›, как указано в документации laravel.com/docs/5.5/broadcasting#configuration ? - person LorenzoBerti; 29.09.2017
comment
Можете ли вы отредактировать вопрос с channels.php и BroadcastServiceProvider без канала? Я думаю, проблема в названии Broadcast::channel(). это должно быть: Broadcast::channel(test-channel.{id}) - person LorenzoBerti; 29.09.2017