【问题标题】:way to properly setup Laravel-echo authentication for private channels为私有频道正确设置 Laravel-echo 身份验证的方法
【发布时间】:2017-12-26 03:07:42
【问题描述】:

我尝试了很多,但仍然无法正确设置 LaravelEcho。实际上我无法设置身份验证步骤。私人频道没有进行身份验证。这是 larave-echo CLI 结果

Boostrap.js

/**
 * Echo exposes an expressive API for subscribing to channels and listening
 * for events that are broadcast by Laravel. Echo and event broadcasting
 * allows your team to easily build robust real-time web applications.
 */

import Echo from "laravel-echo"

// window.Pusher = require('pusher-js');
window.io = require('socket.io-client');

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://localhost:6001'
});

Layout.blade.php

Echo.private('App.User.'+id)
                .notification((notification) => {
                    console.log(notification);
  });

laravel-echo-server.json

{
    "authHost": "http://bigplan.com",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "*********",
            "key": "*************************"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "localhost"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": false,
    "host": "localhost",
    "port": "6001",
    "protocol": "http",
    "referrers": [],
    "sslCertPath": "",
    "sslKeyPath": "",
    "verifyAuthPath": true,
    "verifyAuthServer": false
}

【问题讨论】:

  • 在当前的迭代中,Laravel 总是假设它正在监听 App.Events.,所以它当前正在监听 App.Events.App.User。要解决这个问题,请在自定义命名空间前加上 .,例如:@ 987654329@

标签: laravel socket.io laravel-echo


【解决方案1】:

您可能缺少用于身份验证的路由,默认情况下它位于 routes/channel.php 中。如果经过身份验证,广播回调应该返回 true。

这是一个例子:

Broadcast::channel('notify.{employeeId}', function ($user, $employeeId) {

    $employee = $user->employee;

    if (!$employee){
        return false;
    }

    return $employee->id==$employeeId;

}); 

notify.{employeeId} 是您在 Event 类中定义的私有频道名称/

$employeeId 这是你从 echo 客户端发送的,可以是任何东西,在我的例子中,它是员工 ID。

$user 是当前经过身份验证的用户。

文档: https://laravel.com/docs/5.5/broadcasting#authorizing-channels

【讨论】:

    猜你喜欢
    • 2019-01-04
    • 2019-01-19
    • 2021-06-01
    • 2020-07-23
    • 2020-07-28
    • 1970-01-01
    • 2023-03-17
    • 2018-01-24
    • 2014-04-24
    相关资源
    最近更新 更多