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);
});
是因为我们的挑版本不一样吗,我在中间件写 api 会报
AccessDeniedHttpException
正琢磨为啥认证不成功 :kissing_heart: :kissing_heart: :kissing_heart: