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);
            });
刘晓峰
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

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

4年前 评论
全村的希望 (楼主) 3年前

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

4年前 评论

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