訊息通道路由出現 403 問題的最好解決辦法

Qubiao發表於2020-10-27

/broadcasting/auth 出現 403 問題的最好解決辦法

訊息通道路由出現 403 問題的最好解決辦法

原因是獲取不到登入使用者的資訊,至於導致原因可能是你本身更改原生的登入認證類,導致不相容問題之類。

本人是在用dcat-admin 開發過程中發現dcat的認證模式與laravel 原生的有差異,導致Request 獲取不到 user 資訊

解決辦法

重寫原生類\Illuminate\Broadcasting\BroadcastController

  • 首先在app下建立一個新類

主要目的就是request 中注入認證通過的 user 資訊,dcatAdmin是通過Admin::user() 獲取,你可以根據自己實際的情況做調整

...

class BroadcastAuthController extends BroadcastController
{
    public function authenticate(Request $request)
    {
        $request->setUserResolver(function() {
            return Admin::user();
        });

        return parent::authenticate($request); // TODO: Change the autogenerated stub
    }
}
  • 路由配置檔案中加入/broadcasting/auth
    ...

    $router->match(
        ['get', 'post'], '/broadcasting/auth',
        'BroadcastAuthController@authenticate'
    );
  • 最後註釋掉原生的路由
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;

class BroadcastServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
//        Broadcast::routes();

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

到此403問題就解決了

訊息通道路由出現 403 問題的最好解決辦法

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章