Аутентификация толкателя не работает должным образом

Я сделал проект с Laravel и реагирую. Для видеочата определен компонент реакции. Видео работает, но у меня возникают проблемы с присутствием_auth (), в основном я получаю сообщение об ошибке с ответом 500 ()

Call to undefined method Pusher\Pusher::presence_auth()

Ниже приведен файл моих веб-маршрутов:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::post('/pusher/auth', 'HomeController@authenticate');

HomeController, где я получаю эту ошибку:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use \Pusher\Pusher;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('home');
    }

    public function authenticate(Request $request){
        $socketId = $request->socket_id;
        $channelName = $request->channel_name;

        $pusher = new Pusher('7525d88e2baa6d08b175', 'c25081ca96b9033e941c', '523589', [
            'cluster' => 'ap1',
            'encrypted' => true
        ]);

        $presence_data = ['name' => auth()->user()->name];
        $key = $pusher->presence_auth($channelName, $socketId, auth()->id(), $presence_data);

        return response($key);
    }
}

И, наконец, мой файл App.js с компонентами:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import MediaHandler from '../MediaHandler';
import Pusher from 'pusher-js';
import Peer from 'simple-peer';

const APP_KEY = '7525d88e2baa6d08b175';

export default class App extends Component {
    constructor(){
        super();


        this.state = {
            hasMedia: false,
            otherUserId: null
        };

        this.user = window.user;
        this.user.stream = null;
        this.peers = {};

        this.mediaHandler = new MediaHandler();
        this.setupPusher();

        this.callTo = this.callTo.bind(this);
        this.setupPusher = this.setupPusher.bind(this);
        this.startPeer = this.startPeer.bind(this);
    }

    componentWillMount(){
        this.mediaHandler.getPermissions()
        .then((stream) => {
            this.setState({hasMedia: true});
            this.user.stream = stream;

            try{
                this.myVideo.srcObject = stream;
            } catch(e) {
                this.myVideo.src = URL.createObjectURL(stream);
            }
            this.myVideo.play();
        })
    }

    setupPusher(){
        this.pusher = new Pusher(APP_KEY, {
            authEndpoint: '/pusher/auth',
            cluster: 'ap1',
            auth: {
                params: this.user.id,
                headers: {
                    'X-CSRF-Token': window.csrfToken
                }
            }
        });

        this.channel = this.pusher.subscribe('presence-video-channel');

        this.channel.bind(`client-signal-${this.user.id}`, (signal) => {
            let peer = this.peers[signal.userId];

            if (peer == undefined){
                this.setState({otherUserId: signal.userId});
                peer = this.startPeer(signal.userId, false);
            }
            peer.signal(signal.data);
        });
    }

    startPeer(userId, initiator = true){
        const peer = new Peer({
            initiator,
            stream: this.user.stream,
            trickle: false
        });

        peer.on('signal', (data) => {
            this.channel.trigger(`client-signal-${userId}`, {
                type: 'signal',
                userId: this.user.id,
                data: data
            });
        });

        peer.on('stream', (stream) => {
            try{
                this.userVideo.srcObject = stream;
            } catch(e) {
                this.userVideo.src = URL.createObjectURL(stream);
            }
            this.userVideo.play();
        });

        peer.on('close', () => {
            let peer = this.peers[userId];
            if (peer != undefined){
                peer.destroy();
            }
            this.peers[userId] = undefined;
        });

        return peer;
    }

    callTo(userId){
        this.peers[userId] = this.startPeer(userId);
    }


    render() {
        return (
            <div className = "App">
            {[1,2,3,4].map((userId) => {
                return this.user.id != userId ? <button key = {userId} onClick = {() => this.callTo(userId)}>Call {userId}</button> : null
            })}
                <div className = "video-container">
                    <video className = "my-video" ref = {(ref) => {this.myVideo = ref;}}></video>
                    <video className = "user-video" ref = {(ref) => {this.userVideo = ref;}}></video>
                </div>
            </div>
        );
    }
}

if (document.getElementById('app')) {
    ReactDOM.render(<App />, document.getElementById('app'));
}

Все остальное работает нормально в потоке, но по какой-то причине функция присутствует_auth () не идентифицируется.

Какую версию pusher-php-server вы используете?

Will Sewell 15.05.2018 13:07

Я использую версию 3.0.3

Amin Baig 15.05.2018 13:09

@WillSewell ... ты можешь мне с этим помочь. Я гоняюсь за этим почти три дня. Был бы очень признателен за любую помощь. В прошлую субботу я уже открывал тикет: запрос № 13505, но все еще жду его разрешения.

Amin Baig 15.05.2018 13:45

Несколько вещей, которые помогли бы мне в этом разобраться: можете ли вы вызвать var_dump и get_class_methods на $pusher и распечатать результат? Еще лучше: не могли бы вы заархивировать весь свой проект и отправить его мне, чтобы я попытался воспроизвести проблему?

Will Sewell 15.05.2018 22:24

Конечно ... делать это сейчас, куда мне его отправить?

Amin Baig 15.05.2018 22:29

@WillSewell ... Я заархивировал проект, удалил папку node_modules, поэтому вам понадобится обновление композитора npm install. Посоветуйте, пожалуйста, куда мне его отправить.

Amin Baig 15.05.2018 22:41

Вы можете использовать службу загрузки файлов, например uploadfiles.io

Will Sewell 16.05.2018 12:43

Отлично ... вот ссылка: ufile.io/u0ltz Я очень надеюсь, что вы, ребята, можете помочь

Amin Baig 16.05.2018 12:47

Проблема в том, что вы фактически используете эта версияpusher-php-server. Этого нет даже в главной ветви (new-lib), и он не включает метод presence_auth. Вы можете использовать метод authenticate или обновить версию в файле composer.lock до master.

Will Sewell 16.05.2018 13:47

Спасибо ... Я этого не заметил. Обновление проекта и тестирование с изменениями сейчас.

Amin Baig 16.05.2018 13:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
10
841
1

Ответы 1

Итак, у меня была такая же проблема, и я смог ее решить. мой клиент pusher php был pusher / pusher-php-server "~ 3.0". В этой версии библиотеки метод присутствия_auth () недоступен. Мне пришлось использовать последнюю версию библиотеки 5, и она работала без каких-либо дополнительных изменений. Я просто обновляю до последней версии.

Другие вопросы по теме