如何在 Laravel 中分离广播路由授权中间件
How can i separate broadcasting routes authorization middleware in Laravel
我需要通过网络中间件或 auth:api 中间件授权广播路由。下面的代码授权来自 api 的路由 Authorization: Bearer 'token'
作为请求 header 和 socket.io-client
但它不适用于 csrfToken
,如果我只使用 Broadcast::routes()
它只授权网络订阅者
class BroadcastServiceProvider extends ServiceProvider
{
public function boot()
{
Broadcast::routes(["middleware" => ["auth:api", "web"] ]);
require base_path('routes/channels.php');
}
}
有没有办法解决这个问题,或者创建两组不同的私人频道并以不同方式授权?非常感谢你的帮助!
我找到的最佳解决方案。在你的 LoginController.php 添加 authenticated 函数。
protected function authenticated(Request $request, $user){
$bearer_token = $user->createToken('Web'); //This will create the bearer token when user successfully login
Session::put('user_chat_token', $bearer_token->accessToken); //Store token in the session.
}
在你的master.blade.php布局中
<script>
var access_token = '{{ (isset($access_token)) ? $access_token : "" }}';
</script>
现在让你的access_token进入bootstrap.js
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname,
auth: {
headers: {
Authorization: 'Bearer ' + access_token
}
}
});
我需要通过网络中间件或 auth:api 中间件授权广播路由。下面的代码授权来自 api 的路由 Authorization: Bearer 'token'
作为请求 header 和 socket.io-client
但它不适用于 csrfToken
,如果我只使用 Broadcast::routes()
它只授权网络订阅者
class BroadcastServiceProvider extends ServiceProvider
{
public function boot()
{
Broadcast::routes(["middleware" => ["auth:api", "web"] ]);
require base_path('routes/channels.php');
}
}
有没有办法解决这个问题,或者创建两组不同的私人频道并以不同方式授权?非常感谢你的帮助!
我找到的最佳解决方案。在你的 LoginController.php 添加 authenticated 函数。
protected function authenticated(Request $request, $user){
$bearer_token = $user->createToken('Web'); //This will create the bearer token when user successfully login
Session::put('user_chat_token', $bearer_token->accessToken); //Store token in the session.
}
在你的master.blade.php布局中
<script>
var access_token = '{{ (isset($access_token)) ? $access_token : "" }}';
</script>
现在让你的access_token进入bootstrap.js
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname,
auth: {
headers: {
Authorization: 'Bearer ' + access_token
}
}
});