Laravel Echo + Laravel Passport + CORS - PullRequest
       8

Laravel Echo + Laravel Passport + CORS

0 голосов
/ 18 сентября 2018

Доброе время суток,
В последнее время я столкнулся с ошибкой при аутентификации в laravel-echo-server.

Мне удалось настроить приложение с помощью Laravel Passport + Vue.jsи конечные точки, защищенные auth:api middleware , работают просто отлично.

Однако, когда я пытаюсь аутентифицировать пользователя с помощью Laravel Echo, я получаю исключение 405 в журнале laravel-echo-server .

Чтобы добавить аутентификацию к конечной точке api laravel-echo-server, я изменил содержимое BroadcastServiceProvider.php на
Broadcast::routes(['prefix' => 'api', 'middleware' => 'auth:api']); и вот как мой файл laravel-echo-server.json выглядит как

{
  "authHost": "http://192.168.225.128",
  "authEndpoint": "/api/broadcasting/auth",
  "clients": [
    {
      "appId": "APP_ID",
      "key": "APP_KEY"
    }
  ],
  "database": "redis",
  "databaseConfig": {
    "redis": {},
    "sqlite": {
      "databasePath": "/database/laravel-echo-server.sqlite"
    }
  },
  "devMode": true,
  "host": null,
  "port": "3389",
  "protocol": "http",
  "sslCertPath": "",
  "sslKeyPath": "",
  "sslCertChainPath": "",
  "sslPassphrase": "",
  "apiOriginAllow": {
    "allowCors": true,
    "allowOrigin": "http://192.168.225.128",
    "allowMethods": "OPTIONS, GET, POST",
    "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
  }
}

И вот как эхо-сервер настраивается из Vue.js app:

import Vue from 'vue';
import Echo from 'laravel-echo';
const io = require('socket.io-client');
import store from '~/store';
window.io = io;

if (typeof io !== undefined) {
    let authenticationToken = store.getters['account/token'];
    let authenticated = store.getters['account/authenticated'];

    let echo = new Echo({
        broadcaster: 'socket.io',
        host: window.location.hostname + ':3389',
        auth: {
            headers: {
                Authorization: (authenticated) ? 'Bearer ' + authenticationToken : ''
            }
        }
    });
    window.Echo = echo;
    if (! Vue.hasOwnProperty('$echo')) {
        Object.defineProperty(Vue.prototype, '$echo', {
            get() {
                return echo;
        }
        });
    }
    if (! Vue.hasOwnProperty('$io')) {
        Object.defineProperty(Vue.prototype, '$io', {
            get() {
                return io;
            }
        });
    }
}

Учитывая, что laravel-echo-server выдает ошибку 405, это означает, что все данные, передаваемые в службу подписки, верны, однако дляпо какой-то причине я не могу получить метод в laravel-echo-server журнал ошибок.

Для пояснения я прилагаю сам журнал: Pastebin

1 Ответ

0 голосов
/ 10 января 2019

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

Вам необходимо удалить комментарий App\Providers\BroadcastServiceProvider::class в config / app.php.

Вы можете подтвердить, когда вы запустите php artisan route:list, и там должен появиться api / broadcasting / auth.

...