美文网首页laravel核心
laravel做项目自定义路由-看守器

laravel做项目自定义路由-看守器

作者: 云龙789 | 来源:发表于2018-10-11 23:44 被阅读22次

手册-中间件
指定看守器

场景

在做一个新项目中,我们可能需要做不同模块的区分,自定义路由和用户认证看守器。本文将以创建一个 admin.php 路由文件,admin_throung路由过滤,admin_middleward 中间件和 Admin 看守器为例

定义路由文件 route/admin.php

App/Providers/RouteServiceProvider.php 文件中自定义路由

/**
     * 后台路由
     * @return void
     */
    protected function mapAdminRoutes()
    {
        Route::middleware('admin_throung') //路由中间件
            ->namespace('App\Http\Controllers\Admin') //路由控制器命名空间
            ->group(base_path('routes/admin.php')); // 路由文件以及位置
    }

在映射文件中要添加以上 `mapAdminRoutes` 方法
  public function map()
    {
        .
        .
        $this->mapAdminRoutes();
    }
定义新路由文件

路由定义了路由文件 routes/admin.php ,路由控制器位置 App\Http\Controllers\Admin,以及路由中间件 admin_throung

admin_throung路由过滤 的对应值

App/Http/Kernel.php 文件中 protected $middlewareGroups 数组中,仿照原有的 web,再写一个 admin_middleward 为键的数组即可。但是你如果此处与 web 值并无区别的话,做路由的时候直接可以选择 Route::middleware('web'),而不需要重新定义中间件。

路由过滤处理

定义新的看守器

config/auth.php
config/auth.php 中 guards 数组定义新的看守器 Admin,driver=>session ,表示数据是存储在session中,使用的 SessionGuard.php,如果是 token,代表使用的是 TokenGuard.php。我们来解析下这个文件中的user() 方法,也就是对应的 \Auth::user() 的数据
user() 追踪到了 getTokenForRequest()  追踪 bearerToken()
   public function user()
    {
        if (! is_null($this->user)) {
            return $this->user;
        }

        $user = null;

        $token = $this->getTokenForRequest();

        if (! empty($token)) {
            $user = $this->provider->retrieveByCredentials(
                [$this->storageKey => $token]
            );
        }

        return $this->user = $user;
    }

    /**
     * Get the token for the current request.
     *
     * @return string
     */
    public function getTokenForRequest()
    {
        $token = $this->request->query($this->inputKey);

        if (empty($token)) {
            $token = $this->request->input($this->inputKey);
        }

        if (empty($token)) {
            $token = $this->request->bearerToken();
        }

        if (empty($token)) {
            $token = $this->request->getPassword();
        }

        return $token;
    }

    public function bearerToken()
    {
        $header = $this->header('Authorization', '');

        if (Str::startsWith($header, 'Bearer ')) {
            return Str::substr($header, 7);
        }
    }
看守器 driver 的选择

通过以上代码追踪,我们我们使用APP的话,需要使用 token 方式验证,追踪代码得到,我们只需要在头部添加 Authorization键,值为 'Bearer '即可,切记是7个字符,中间有一个空格,加上数据库中的 api_token 字段值即可(如果数据表没这个字段,需要添加),TokenGuard 类实例化的时候直接指定的是 api_token 这个字段

auth:api 登录
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    
    public function __construct(Request $request)
    {
        if ($request->headers->get('authorization')){
            $this->middleware('auth:api');
        }else{
            $this->middleware('auth');
        }
    }

    public function test(Request $request)
    {
        return \Auth::user();
    }
}

API 也可以直接这样打印 `  dd(\Auth::guard('api')->user()->toArray());`
在页面中 dd(\Auth::guard('web')->user());
在使用   admin 守护器的时候 任何操作都需要添加 guard('admin'),不然会使用默认守护

目前我还不知道为什么 API 守护非要使用 auth:api 而不是直接使用 api
laravel 指定看守器
将 auth 中间件添加到路由时,还需要指定使用哪个看守器来认证用户。指定的看守器对应配置文件 auth.phpguards 数组的某个键:

public function __construct()
{
    $this->middleware('auth:api');
}

相关文章

  • laravel做项目自定义路由-看守器

    手册-中间件指定看守器 场景 在做一个新项目中,我们可能需要做不同模块的区分,自定义路由和用户认证看守器。本文将以...

  • laravel8(二)配置自定义路由文件

    Laravel8创建自定义路由文件与laravel5系列是有区别的。 关于laravel5添加自定义路由文件,请移...

  • Laravel5.5

    作者:烨竹 1:laravel安装指令,安装器安装 下载创建blog项目 2:工匠指令 3:路由 路由文件:rou...

  • Laravel框架中nginx配置

    设置laravel项目的域名站点的时候,需要对nginx做一些对应的重写rewrite配置,用来做相关路由,否则会...

  • laravel(二)路由

    路由 laravel强路由框架,根据querystring进行回调匹配,可以将模块/路由器/方法简化成一个标识 路...

  • angularJS总结

    内置指令 自定义指令 控制器 作用域 内置过滤器 自定义过滤器 路由 ui.router 项目搭建 建议:继...

  • Laravel 5常用命令行代码

    安装Laravel 5.1最新版本 启动PHP的Web服务 显示项目路由列表 生成控制器 创建模型 创建模型并创建...

  • laravel路由

    Laravel 常见路由 路由参数

  • Laravel新建路由文件

    版本Laravel5.6 Laravel除了使用默认的路由文件来定义路由,还可以使用自己的路由文件。创建自己的路由...

  • laravel 新建项目

    创建laravel项目 1、安装Laravel安装器 可通过“composer global update”更新l...

网友评论

    本文标题:laravel做项目自定义路由-看守器

    本文链接:https://www.haomeiwen.com/subject/nkviaftx.html