如何在Laravel中分离广播路由授权中间件

时间:2017-09-27 01:42:23

标签: laravel broadcast

我需要通过网络中间件或auth:api中间件授权广播路由。下面的代码使用Authorization: Bearer 'token'作为请求标头来授权来自api调用的路由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'); } } 网络订阅者

&

有没有办法解决这个问题,或者创建两组不同的私人频道并以不同方式授权它们?我很感激你的帮助!

1 个答案:

答案 0 :(得分:0)

我发现的最佳解决方案。在 LoginController.php 中添加经过身份验证的功能。

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>

现在在 bootstrap.js

中获取access_token
 window.Echo = new Echo({
 broadcaster: 'socket.io',
 host: window.location.hostname,
 auth: { 
    headers: { 
         Authorization: 'Bearer ' + access_token
    } 
  }
});