通过 API 进行 Laravel Echo 身份验证

标签 laravel pusher laravel-echo pusher-js

使用 Pusher结合 Echo在客户端,我正在尝试使用 Bearer 通过 api 验证私有(private) channel 授权 header token - 但是我遇到了以下日志 (最后的日志是错误的) :

Pusher : : ["State changed","initialized -> connecting"]


Pusher : : ["Connecting",{"transport":"ws","url":"ws://ws-mt1.pusher.com:80/app/************?protocol=7&client=js&version=7.0.3&flash=false"}]


Pusher : : ["State changed","connecting -> connected with new socket ID 224550.32180982"]


Pusher : : ["No callbacks on private-App.User.17 for pusher:subscription_error"]


Pusher : : ["Error: JSON returned from auth endpoint was invalid, yet status code was 200. Data was: <!doctype html>\n<html class="en" lang="en">\n\t\n\t\t\t<meta charset="utf-...


好像我的服务器只是返回网页而不是 JSON 响应。
这是我的客户端设置:
Pusher.logToConsole = true

const PusherClient = new Pusher(PUSHER_APP_KEY,{
    cluster: PUSHER_APP_CLUSTER,
    wsHost: `ws-${PUSHER_APP_CLUSTER}.pusher.com`,
    wssPort: 443,
    enabledTransports: ['ws'],
    forceTLS: true,
    encrypted: true,
    auth: {
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${token}`
        }
    },
    authEndpoint: http://127.0.0.1:8000/api/broadcasting/auth'
});

return new Echo({
    broadcaster: 'pusher',
    client: PusherClient
})
api.php 中定义的广播路由在 Laravel 服务器上:
Route::group(['middleware' => 'auth:api'], function () {
    Broadcast::routes();
});
enter image description here
我在这里想念什么?

最佳答案

首先,您可以在没有 laravel-echo 的情况下设置客户端,只需使用 pusher-js。在我使用的版本中不应该有 Content-Type header :

    auth: {
        headers: {
            'Authorization': `Bearer CLIENT_TOKEN`,
        }

    },
您必须确保 channel 您正在订阅可用并且所有推送者应用参数还有用户 token 正确插入。

关于通过 API 进行 Laravel Echo 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67245572/

相关文章:

php - 在 pusher.com 中的一次身份验证调用中对多个专用 channel 进行身份验证

javascript - Pusher,存在和私有(private)的不同身份验证?

php - Laravel 回显服务器无法在生产服务器中运行

Laravel,无法通过 id 登录用户然后重定向他

Laravel 回声 "Echo is not defined"

java - 如何使用 Pusher 使用 ClientID 从客户端向服务器发送消息

php - 为什么 Laravel 广播事件总是使用 "laravel_database_channel" channel 以及如何更改它?

laravel-5 - SocketIO + Redis 连接关闭

javascript - Laravel 未捕获引用错误 : $ is not defined

php - Laravel Firebase cURL 错误 60 : SSL certificate problem: unable to get local issuer certificate