4

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

{
    Gate::define('viewHorizon', function ($user = null) {
        return true;
    });
}

谁能建议我缺少什么?

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

4

4 回答 4

7

检查此 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,
    ],
于 2020-04-18T05:59:23.300 回答
5

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

    /**
     * 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');
            }
        });
    }

所以当你去你的生产服务器时需要像这样传递参数:

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

于 2020-04-18T05:55:28.980 回答
1

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

    protected function authorization()
    {
        Horizon::auth(function () {
            return true;
        });
    }

此方法覆盖验证 HTTP 请求的父方法。

于 2021-08-22T21:35:28.043 回答
1

对我来说,问题是我设置了app\Providers\HorizonServiceProvider.php

/**
 * Register the Horizon gate.
 *
 * This gate determines who can access Horizon in non-local environments.
 *
 * @return void
 */
protected function gate() {
    Gate::define('viewHorizon', function ($user) {//https://laravel.com/docs/7.x/horizon#dashboard-authorization            
        return $user->id === \App\Constants\Permissions::ADMIN_USER_ID;
    });
}

然后我忘记了,我需要先登录 example.com/login,然后才能访问 example.com/horizo​​n。

请参阅https://github.com/laravel/horizo​​n /issues/563#issuecomment-500821983和https://laravel.com/docs/8.x/horizo​​n#dashboard-authorization

于 2021-04-19T11:06:28.517 回答