我得到了使用Laravel Passport (支持OAUTH2 )实现移动应用程序接口的任务。我想重用我在网站上使用的相同的Controller方法(其中一些)。我尝试过这样做:
public function __construct()
{
$this->middleware('auth');
$this->middleware('auth:api');
}
但这不起作用(为什么?)。我只需要为api创建新的控制器吗?谢谢!
发布于 2018-09-07 04:30:46
在你的路由文件中,你可以通过这样做来指定多个中间件。
Route::middleware(['auth:api', 'auth'])->group(function() {
//my routes
});
但对于您的使用,您可以只在您的api路由文件中使用auth:api
,并在您的web路由文件中使用auth
。
此外,如果您希望在不通过路由进行分组的情况下对整个控制器进行中间件,则可以使用中间件组。
在Http 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');
}
此外,您可以从中间件组中排除控制器中的方法。
public function __construct() {
$this->middleware('both', ['except' => [ 'methodOne', 'methodTwo' ]]);
}
发布于 2018-09-07 07:45:13
如果您想让两个不同的身份验证卫士检查一个用户,您可以使用auth
中间件来实现。它接受未指定数量的参数:
auth:web,api
它将检查用户的每个防护,直到返回一个,然后将其用作请求的当前防护。
你得到的是在堆栈中运行的两个不同的中间件。由于它们中只有一个会真正通过,因此您的设置始终是“未验证”的。(除非您有一个会话,并且出于某种奇怪的原因传递一个令牌)。
SO - Laravel two diffrent middleware authentication from auth middleware only
SO - Laravel multi auth protecting route multple middleware not working
https://stackoverflow.com/questions/52211660
复制相似问题