具有Bearer token 的Laravel API-中间件auth:api - php

我正在尝试使用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后面的代码逻辑,或者是否应该创建新的中间件并检查请求标头?

参考方案

二聚体

如果您需要自定义代码来处理身份验证,则应创建自己的中间件和身份验证防护,并使用它代替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中间件组(在本例中为ThrottleRequestsSubstituteBinding中间件)和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

Analytics API:自动身份验证 - php

我正在尝试使用Google Analytics(分析)Reporting API构建仪表板,以便为我公司的客户创建报告。问题是我需要使用cronjob创建报告,但这需要身份验证。我尝试了以下方法:1.使用API for web applications:我设法完成了这项工作,但是OAuth2流程通过将我重定向到Google登录页面,迫使我向Google进行身…

Last.fm API-跟踪持续时间 - php

我正在使用Last.fm API,并且坚持使用了看似相当简单的工具。responses之一是持续时间。返回为:222000 但是我如何格式化(在PHP中)它看起来像MIN:SEC 3:42 参考方案 持续时间似乎以毫秒为单位。只需除以1000即可得到秒数。

Google Analytics API - php

我正在实施Google Analytics(分析)Api。授权完成没有问题。成功授权后,我得到403 return code并得到消息:User does not have sufficient permissions for this profile。我的帐户具有Google Analytics(分析)数据,可以跟踪多个网站,并且我可以从网络浏览器访问它而…

Google Analytics(分析)SEO-PHP API - php

我有一个PHP文件,可为我提供Google Analytics(分析)数据,例如综合浏览量,首页或有机数据等简单数据。现在,我不太希望从SEO部分获得东西。例如:TOP 50个搜索关键字(带有印象数和点击数)我在API中找不到任何有关如何获取这些值的帮助。这是我的api调用的示例:$params = array( 'dimensions'…

Google Analytics API DateRange定义 - php

Google Analytics(分析)报告api中“ 1daysAgo”的定义到底是什么?我正在使用Analytics(分析)API来获取传入流量。我想获取过去24小时内传入流量的结果。如果我在php中创建一个新的DateTime对象,例如:$date = new DateTime('1daysAgo'); 我的约会恰好是24小时前。但…