php - 带有 Bearer 令牌的 Laravel API - 中间件 auth:api
问题描述
我正在尝试使用 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')
验证我的 CURL 标头Authorization: Bearer zzzzzzzzz
,但它不起作用。
所以基本上我需要了解如何更改背后的代码逻辑,auth:api
或者是否应该创建一个新的中间件并检查请求标头?
解决方案
迪克莱默
如果您需要自定义代码来处理身份验证,您应该创建自己的中间件和身份验证保护并使用它而不是 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
andSubstituteBinding
中间件)和 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
推荐阅读
- excel - VBA为多列创建过滤器
- java - JPA 推断查询,带有一个参数以使用 OR 运算符进行搜索
- html - 使用thymeleaf从html中的svg图形分配点击值
- python - 如何按数组的长度对数组中的数组进行排序?
- python - tkinter 滚动条没有滚动条
- ios - 使用 MagazineLayout 和 Carbon 时基于内容的具有动态高度的嵌套 CollectionView
- gradle - NoClassDefFoundError: org/jetbrains/plugins/gradle/tooling/ModelBuilderService
- javascript - 如何在其中逐项过滤对象数组?javascript
- linux - 对终端中找到的文件执行命令?
- r - 当两个变量与第二个 DF 匹配时,将列添加到 DF