我得到了使用Laravel Passport(用于OAUTH2支持)为移动设备实现API的任务。我想重复使用网站上使用的相同Controller方法(其中一些方法)。我尝试这样做:
public function __construct()
{
$this->middleware('auth');
$this->middleware('auth:api');
}
但这不起作用(为什么?)。我是否只需要为api创建新的控制器?谢谢!
答案 0 :(得分:0)
您可以在路由文件中指定多个中间件。
AND [column] BETWEEN v1 AND V2
但是您似乎可以在api路由文件中使用Route::middleware(['auth:api', 'auth'])->group(function() {
//my routes
});
,在Web路由文件中使用auth:api
。
此外,如果您希望中间件整个控制器而不通过路由进行分组,则可以使用中间件组。
在您的Http auth
中向数组Kernel.php
添加新索引
$middlewareGroups
然后,您应该可以在控制器中执行以下操作:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
'auth:api',
],
'both' => [
'auth:api',
'auth'
],
];
此外,您可以从中间件组中排除控制器中的方法。
public function __construct() {
$this->middleware('both');
}
答案 1 :(得分:0)
如果您要让2个不同的Auth Guards检查用户,则可以使用auth
中间件来进行。它使用未指定数量的参数:
auth:web,api
这将检查用户的每个保护措施,直到返回一个用户,然后将其用作请求的当前保护措施。
您所拥有的是栈中运行的2种不同的中间件。由于只有其中一个会通过,因此您的设置始终“未经身份验证”。 (除非您进行了会话并且出于某种奇怪的原因传递令牌)。
SO - Laravel two diffrent middleware authentication from auth middleware only
SO - Laravel multi auth protecting route multple middleware not working