zoukankan      html  css  js  c++  java
  • [PHP] 浅谈 Laravel Authentication 的 auth:api

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

    一.

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

    二.

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

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

    对于 Auth 中间件来说,参数值 api 表示所使用的 guard 是 api,我们可以看其所继承的父类实现:

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

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

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

    那么可以注释掉 redirectTo,然后在 handler.php 中处理 AuthenticationException。

    三.

    在 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:https://www.cnblogs.com/farwish/p/11800803.html

  • 相关阅读:
    Idea打包问题
    centos问题总结
    Linux CentOS7 系统目录详解
    centos下修改文件后如何保存退出
    利用windows上的VMware安装CentOS7
    VMware安装系统出现Operating System not found 解决方案
    mybatis 0 变成null问题
    Shiro权限前端调用302重定向
    java版本
    产品画原型工具放入到托管平台
  • 原文地址:https://www.cnblogs.com/farwish/p/11800803.html
Copyright © 2011-2022 走看看