【问题标题】:How can I edit dingo/api auth middleware in Laravel?如何在 Laravel 中编辑 dingo/api auth 中间件?
【发布时间】:2018-11-07 20:28:40
【问题描述】:

在一个完全安静的 Laravel 项目中,我正在使用 dingo/api 包。在处理任何请求之前,我需要设置一些与当前用户相关的配置和其他内容。当我们使用 dingo 时,我们可以这样访问当前用户:

$user = app('Dingo\Api\Auth\Auth')->user();

首先我认为我应该在服务提供商那里做这件事。但是在那里,Laravel 还没有启动 dingo 身份验证,因此它给我一个错误。然后我想我需要编辑名为 api.auth 的 dingo auth 中间件来执行此操作。它在我的路线上的用法是这样的:

<?php

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', ['prefix' => 'v1', 'namespace' => 'App\Http\Controllers'], function ($api) {

    $api->group(['prefix' => 'admin', 'middleware' => 'api.auth'], function ($api) {

        $api->get('checkRole/{branch_id}', 'RoleController@getRoles');

但我无权访问它,因为它是 dingo 包中的内置中间件。那么在这种情况下我该怎么办呢?

【问题讨论】:

    标签: php laravel dingo-api


    【解决方案1】:

    我自己解决了这个问题,但我忘了在这里回答。 我只是扩展了 digo auth 中间件并覆盖了它的handle 方法。但是我不得不通过项目中的所有路由文件替换中间件名称(我正在使用nwidart/laravel-modules包编写模块化项目)。

    <?php
    
        namespace App\Http\Middleware;
    
        use Closure;
        use Dingo\Api\Http\Middleware\Auth;
    
        class ApiAuth extends Auth
        {
            public function handle($request, Closure $next)
            {
                $route = $this->router->getCurrentRoute();
    
                if (!$this->auth->check(false))
                    $this->auth->authenticate($route->getAuthenticationProviders());
    
                ...
                ...
    
                return $next($request);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 2017-05-11
      • 2015-03-22
      • 1970-01-01
      • 2018-06-28
      • 2016-07-22
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多