[PHP] 浅谈 Laravel Authentication 的 auth:api

 

auth:api 在 Laravel 的 Routing , Middleware , API Authentication 主题中都有出现。php

 

一.html

在 Routing 部分能够知道 auth:api 是中间件的名字,表明某个中间件实现,使用方式为 Route::middleware('auth:api')。laravel

 

二.api

在 Middleware 部分能够知道 auth:api 冒号后面的是 中间件参数,多个参数就用逗号分隔,也就是说 'api' 是 auth 中间件的参数。auth 中间件在 app/Http/Kernel.php 的路由中间件里定义:protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class ]。app

 

Middleware 中间件都是在 handle 方法里对请求进行验证的,handle 前面两个参数是 $request, Closure $next。中间件参数在 handle 的默认参数后面,例如 user:creater,editer 就表示 user 中间件的 handle 方法的第三个参数值是 creater, 第四个参数值是 editer。ide

对于 Auth 中间件来讲,参数值 api 表示所使用的 guard 是 api,咱们能够看其所继承的父类实现:this

// Illuminate\Auth\Middleware\Authenticate->handle()

public function handle($request, Closure $next, ...$guards) { $this->authenticate($request, $guards); return $next($request); }

里面的验证所使用的就是下面要讲的 Auth 功能类(AuthManager)。当验证不经过,会抛出 AuthenticationException。spa

 

默认的 app/Http/Middleware/Authenticate 包含一个 redirectTo 方法,当咱们构建 api 应用时,验证未经过并不须要重定向。code

那么能够注释掉 redirectTo,而后在 handler.php 中处理 AuthenticationException。htm

 

三.

在 API Authentication 部分,config/auth.php 配置有多个 guards,分别有本身的 driver 和 providers。

另外 Auth Facade (AuthManager) 提供了 Auth::guard() 方法用于决定 Auth 所使用的 guard。

Auth(Facade)提供了统一的方法来处理用户认证检测、驱动的扩展,经过更改配置而不是代码来使用不一样的驱动。

Auth 内置了两种驱动的实现,AuthManager->createSessionDriver($name, $config), AuthManager->createTokenDriver($name, $config)。

 

若是你想更进一步了解 API Authentication 的运行过程,建议阅读一下 createTokenDriver() 内部实例化的 TokenGuard 类。

TokenGuard 会顺序检测 "query request"、"input request"、"header 键为 Authentication 值为 bearer xxx",从中获取 token 值;接着根据配置中的 provider 的值建立 provider 具体实例来验证 token。

 

有关 auth:api 与 Auth 的意义大体如此。

 

相关:[PHP] 浅谈 Laravel Authentication 的 guards 与 providers

相关:[PHP] 浅谈 Laravel auth:api 不一样驱动 token 和 passport 的区别

相关:[PHP] 浅谈 Laravel 三大验证方式的区别, auth:api, passport, auth:airlock

Link:http://www.javashuo.com/article/p-aynvpbwq-bu.html

相关文章
相关标签/搜索