Невозможно получить строку аутентификации из конечной точки аутентификации - получен статус 500 - PullRequest
0 голосов
/ 05 октября 2019

В Laravel 5.8, когда я пытаюсь listen на частный канал (используя Pusher), я получаю эту ошибку в консоли, и, что удивительно, я не нашел нигде в сети, где говорилось об этой ошибке (особенно первая часть,где-то говорил о статусе 500, но это не помогло.):

Невозможно получить строку аутентификации из конечной точки аутентификации - получен статус 500 из / broadcasting / auth. Клиенты должны пройти проверку подлинности для присоединения к частным каналам или каналам присутствия.

Notification.php

class Notification implements ShouldBroadcastNow
{

    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $user;

    /**
     * 
     *
     * @param User $user
     */
    public function __construct(User $user)
    {
        $this->user = $user;

    }

    public function broadcastOn()
    {
       return new PrivateChannel('notif.'.$this->user->id);
    }

    public function broadcastAs()
    {
        return 'Notification';
    }

}

Channels.php

Broadcast::channel('notif.{id}', function ($user, $id) {

    //return (int) $user->id === (int) $id;

     return true;
});

app.js

import Echo from 'laravel-echo'

window.Pusher = require('pusher-js');

Pusher.logToConsole = true;

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'WORKING KEY',
    cluster : "eu",
    encrypted: false,
    csrfToken: 'WORKING TOKEN',
});


window.Echo.private('notif.${id}').listen('.Notification', function (e) {

        console.log(e);

    });

Мне не нужна авторизация API, проект основан на сети.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Я думаю, что у вас отсутствует параметр, попробуйте это:

import Echo from 'laravel-echo'

window.Pusher = require('pusher-js');

Pusher.logToConsole = true;

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'WORKING KEY',
    cluster : "eu",
    encrypted: true,<-----
    csrfToken: 'WORKING TOKEN',
    authEndpoint: 'https://yourwebsitename.com/broadcasting/auth', <-----
});


window.Echo.private('notif.${id}').listen('.Notification', function (e) {

        console.log(e);

    });
0 голосов
/ 05 октября 2019

На основе этого руководства здесь https://laracasts.com/series/get-real-with-laravel-echo/episodes/1

Убедитесь, что вы уже раскомментировали BroadcastServiceProvider.php в файлах config / app.php в разделе Поставщики служб приложений ...

    /*
    * Application Service Providers...
    */
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    App\Providers\BroadcastServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,

так, чтобы маршрутизация могла перемещаться по Channels.php.

В случае, если все еще не работает, вы можете попробовать добавить некоторую аутентификацию в BroadcastServiceProvider.php, то есть добавив проверку auth: api следующим образом:

public function boot()
{
    Broadcast::routes(['middleware' => ['auth:api']]);

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

, если вы используете auth для ссылок внутри вашего маршрута api.php.

# EDIT 1

Для любой проблемы с аутентификацией uможно попробовать добавить эту строку в app / Http / Kernel.php

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
         ..other middleware groups,
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
    ],

Для использования токена аутентификации, как указано в документации Laravel здесь: https://laravel.com/docs/5.6/passport#consuming-your-api-with-javascript

...