Laravel Echo + Pusher:广播/验证请求返回登录页面

时间:2018-04-01 14:01:23

标签: laravel-5.3 laravel-echo pusher-js

我将我的应用程序从5.2更新到5.3以使用Pusher广播通知,但是当推送器尝试通过broadcasting/auth验证当前登录用户时,我收到错误:

Pusher : No callbacks on private-App.Models.Client.9 for pusher:subscription_error

在浏览器控制台 - > network-> xhr中,我发现broadcasting/auth的请求没有给我auth:{token}对象,而是返回我的登录页面!!!

我认为这是中间件的问题,但我无法找到它。

BroadcastServiceProvider.php:

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

    /*
     * Authenticate the user's personal channel...
     */
    Broadcast::channel('App.Models.Client.*', function ($user, $userId) {
        return true;
    });

}
导入pusher-js&之后

app.js: Laravel Echo

$(document).ready(function() {
// check if there's a logged in user
if(Laravel.clientId) {
    window.Echo.private(`App.Models.Client.${Laravel.clientId}`)
        .notification((notification) => {
            console.log(notification);
            addNotifications([notification], '#notifications');
        });
} });

任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:1)

使用Laravel版本> 5.3& Pusher,您需要在标头请求中添加令牌,您的代码在 resources / assets / js / bootstrap.js

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'your key',
    cluster: 'your cluster',
    encrypted: true,
    auth: {
        headers: {
            Authorization: 'Bearer ' + YourTokenLogin
        },
    },
});

它对我有用,希望对你有帮助。

答案 1 :(得分:0)

经过长时间的梳理,我终于找到了造成此问题的原因。我使用的是用于身份验证/授权的软件包,名为cartalyst/sentinel,非常好,除了安装后它将完全替代Laravel默认身份验证行为。因此,对broadcasting/auth的任何请求实际上都会被拒绝。