Php Laravel Passport-保护不同用户类型的路由

Php Laravel Passport-保护不同用户类型的路由,php,laravel,authentication,oauth-2.0,laravel-passport,Php,Laravel,Authentication,Oauth 2.0,Laravel Passport,我正在laravel中使用passport对API中的用户进行身份验证。我能够验证来自不同表的不同类型的用户,并为他们生成不同的令牌,但路由不受保护。例如 用户可以像这样访问路由 Route::group(['middleware' => 'auth:api'], function () { Route::group(['prefix' => 'v1'], function () { Route::get('get-seller-list','API\

我正在
laravel
中使用
passport
对API中的用户进行身份验证。我能够验证来自不同表的不同类型的用户,并为他们生成不同的令牌,但路由不受保护。例如 用户可以像这样访问路由

Route::group(['middleware'  =>  'auth:api'], function () {
    Route::group(['prefix'  =>  'v1'], function () {
        Route::get('get-seller-list','API\v1\SellersController@index');
    });
});
卖家可以访问以下路线:

Route::group(['middleware'  =>  'auth:sellers'], function () {
    Route::group(['prefix'  =>  'v1'], function () {
    Route::get('get-seller-detail','API\v1\TestController@getDetails');
    });
});
但是这个
中间件
检查似乎不起作用,因为我可以访问卖家的所有路由,即使我已经在承载头中传递了为api生成的令牌

我的config/auth.php看起来像

'guards' => [
        'user' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'seller' => [
            'driver' => 'passport',
            'provider' => 'sellers',
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],

        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

auth:api
中间件将处理passport令牌身份验证,
sellers
中间件将检查用户是否为卖家。我认为您正在混淆中间件的设置方式

这取决于用户类型的设置方式,但在
卖家
中间件中,您可以检查用户类型/角色:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;

class Sellers
{
    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    /**
     * Create a new filter instance.
     *
     * @param  Guard  $auth
     * @return void
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->user()->is_seller) {
            return $next($request);
        }

         return response()->view('errors.401', [], 401);
    }
}

因此,如果普通用户尝试访问
获取卖家详细信息
路线,它将返回401未经授权的错误,如果卖家尝试访问此路线,它将继续正常访问该路线的代码。

您好,我也有同样的问题。如何解决问题?
Route::group(['middleware'  =>  ['auth:api', 'sellers']], function () {
    Route::group(['prefix'  =>  'v1'], function () {
    Route::get('get-seller-detail','API\v1\TestController@getDetails');
    });
});