我正在尝试使用Bearer Token创建一个API,但我无法弄清楚:
route::middleware('auth:api')
的作用route::middleware('auth:api')
的代码在哪里因此,我的Routes\Api.php
文件中包含以下代码:
Route::get('/login', function (Request $request)
{
if(Auth::guard()->attempt(['email' => $request->email, 'password' => $request->password]) == FALSE)
return response()->json(['status' => FALSE]);
$user = Users::select('id', 'name', 'api_token', 'created_at')->where('email', $request->email)->firstOrFail();
return response()->json(['status' => TRUE, 'user' => $user]);
});
Route::middleware('auth:api')->get('/bookings', function (Request $request)
{
return response()->json(['its working!']);
});
我能够成功连接到路由/login
并检索api_token
。现在,必须在/bookings
路由中使用此令牌才能进行身份验证。
我在跳middleware('auth:api')
验证Authorization: Bearer zzzzzzzzz
的CURL标头,但无法正常工作。
所以基本上我需要了解如何更改auth:api
后面的代码逻辑,或者是否应该创建新的中间件并检查请求标头?
答案 0 :(得分:1)
如果您需要自定义代码来处理身份验证,则应创建自己的中间件和身份验证防护,并使用它代替Laravel提供的默认中间件和身份验证防护。
route::middleware('auth:api')
的作用
它声明路由应实现中间件“ auth”和中间件组“ api”。
的代码在哪里
route::middleware('auth:api')
Laravel中的所有中间件都在app/Http/Kernel.php
中定义。
在那里您可能会看到类似的东西
protected $middlewareGroups = [
....,
'api' => [
'throttle:60,1',
'bindings',
],
];
和
protected $routeMiddleware = [
...,
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
这意味着使用中间件auth:api
的路由实现了api中间件组(在这种情况下为ThrottleRequests
和SubstituteBinding
中间件)和auth中间件(Authenticate
)
实际使用的身份验证保护取决于auth.php
配置文件中的配置:
'guards' => [
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
在上述情况下,使用了TokenGuard(laravel/framework/src/Illuminate/Auth/TokenGuard.php
)。
为回答您的问题,可以在以下位置找到auth中间件的代码
laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php