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