请求域/地平线时,在生产中运行 laravel 地平线会引发 403 错误

Der*_*idi 3 php authentication laravel horizon

我在我的本地环境中有 testet laravel Horizo​​n,一切都按预期工作。当我切换到生产域/地平线时会抛出 403 错误。我已经按照文档中的说明在 Horizo​​nServiceProvider 中设置了门 - 第一步只是在没有身份验证的情况下获得访问权限。我的门现在看起来像这样:

{
    Gate::define('viewHorizon', function ($user = null) {
        return true;
    });
}
Run Code Online (Sandbox Code Playgroud)

谁能建议我缺少什么?

链接到 403 错误 链接到 401 错误 - 没有数据的仪表板

Ita*_*cia 8

错误是因为 Horizo​​n 首先进入boot方法,所以我建议您在 Horizo​​nServiceProvider.php 中编辑boot方法以允许您的请求,如下所示:

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        Horizon::auth(function ($request) {
            if ($request->ajax()){
                return true;
            }
            else if (isset($request->let_me_go) && $request->let_me_go == 'ok'){
                return true;
            }else{
                throw new UnauthorizedHttpException('Unauthorized');
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

因此,当您访问生产服务器时,需要传递如下参数:

my-生产-site.com/horizo​​n/dashboard?let_me_go=ok


Mil*_*lad 7

您需要将以下方法添加到App\Providers\HorizonServiceProvider类中:

class HorizonServiceProvider extends ServiceProvider {
    
    // ...

    protected function authorization()
    {
        Horizon::auth(function () {
            return true;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

此方法覆盖对 HTTP 请求进行身份验证的父方法。


Lob*_*Baz 6

检查此 GitHub 评论:https : //github.com/laravel/horizo​​n/issues/563#issuecomment-480882947

您可能需要注册 Horizo​​n 的服务提供商。

config/app.php

'providers' => [
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
    ...
        App\Providers\TelescopeServiceProvider::class,
        App\Providers\HorizonServiceProvider::class,
    ],
Run Code Online (Sandbox Code Playgroud)