Laravel-echo/server 结合 JWT 配置方式

服务器端配置

App\Providers\BroadcastServiceProvider

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // 更改路由
        Broadcast::routes(["prefix" => "api", "middleware" => ['api', 'jwt.auth']]);

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

laravel-echo-server.json

{
    "authHost": "laravel-echo-server.test",
    "authEndpoint": "/api/broadcasting/auth",
    ...
    "database": "redis",
    ...
}

config/channel.php

<?php

use App\Broadcasting\AdminsChannel;
...
Broadcast::channel('admins.{id}', AdminsChannel::class);

App/Broadcasting/AdminsChannel

<?php

namespace App\Broadcasting;

use App\User;
use CpsAdmin\Models\Admins\Admin;

class AdminsChannel
{
    /**
     * Create a new channel instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Authenticate the user's access to the channel.
     *
     * @param Admin $admin
     * @param $admin_id
     * @return array|bool
     */
    public function join(Admin $admin, $admin_id)
    {
        return (int)$admin->id === (int)$admin_id;
    }
}

客户端配置

html头文件中加入

...
<script src="//{{ Request::getHost() }}:6001/socket.io/socket.io.js"></script>
...

项目启动文件中加入

import Echo from 'laravel-echo'
window.io = require('socket.io-client');

登录后获取token的回调接口中加入代码

...
// 与服务器建立连接
window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001',
    auth: { headers: { 'Authorization': 'Bearer ' + token } }
});

// 监听私有频道
Echo.private('admins.1')
            .notification((notification) => {
                console.log(notification.type);
                console.log(notification.title);
                console.log(notification.error);
            });
刘晓峰
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

是因为我们的挑版本不一样吗,我在中间件写 api 会报 AccessDeniedHttpException

2年前 评论
全村的希望 (楼主) 9个月前

正琢磨为啥认证不成功 :kissing_heart: :kissing_heart: :kissing_heart:

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!