gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:48:45 26 4
gpt4 key购买 nike

我在 laravel 中使用 passport 来验证我在 API 中的用户。我能够验证来自不同表的不同类型的用户并为他们生成不同的 token ,但路由不 protected 。例如。用户可以像这样访问路由

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

但是这个 middleware 检查似乎不起作用,因为我可以访问卖家的所有路由,即使我已经在 Bearer header 中传递了为 api 生成的 token 。

我的 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 中间件将处理护照 token 身份验证,sellers 中间件将检查用户是否是卖家。我认为您对中间件的设置方式感到困惑。

这取决于您如何设置用户类型,但在您的 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);
}
}

然后你可以将你的路由设置为同时使用 auth:apisellers 中间件:

Route::group(['middleware'  =>  ['auth:api', 'sellers']], function () {
Route::group(['prefix' => 'v1'], function () {
Route::get('get-seller-detail','API\v1\TestController@getDetails');
});
});

现在,如果普通用户尝试访问 get-seller-detail 路由,它将返回 401 未经授权的错误,如果卖家尝试访问此路由,它将继续执行该代码路线正常。

关于php - Laravel Passport- 保护不同用户类型的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com