Laravel 框架学习——多表 api 认证

本贴最后更新于 2210 天前,其中的信息可能已经事过境迁

前言

根据 Laravel 官方文档:api 认证
api 认证支持 Eloquentdatabase 方式,我这里的配置选用的是 database 方式

单表 api 认证

数据库

  • 表名:user
  • 字段:api_token 为必须,其它自选

config/auth.php

'guards' => [ 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false ] ], 'providers' => [ 'users' => [ 'driver' => 'database', 'table' => 'user' ] ]

多表 api 认证

新增中间件

运行

php artisan make:middleware EmployeeToken

该命令会在 App\Http\Middleware 目录下新增一个 EmployeeToken.php 文件

注册路由中间件

App\Http\Kernel 类中:

protected $routeMiddleware = [ // 其它中间件... 'employeeToken' => \App\Http\Middleware\EmployeeToken::class, // 其它中间件... ];

中间件代码

EmployeeToken 的代码如下

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\DB; class EmployeeToken { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($req, Closure $next) { $api_token = $req->input('api_token'); if($api_token == null){ return response()->json([ false, 'Token无效!' ]); } $couriers = DB::select('SELECT * FROM employee WHERE api_token = ?', [ $api_token ]); if(count($couriers) != 1){ return response()->json([ false, 'Token无效!' ]); } // api_token转换到courier表 $req->setUserResolver(function() use ($couriers){ return $couriers[0]; }); return $next($req); } }
  • 检查请求输入参数 api_token 是否存在
  • 并检查在表 employee 中是否存在 api_token=输入参数 api_token 的记录
  • 不存在则直接返回 json,附带错误信息
  • 通过 setUserResolver 方法,传递一个闭包,使得 Requestuser() 方法返回 employee 表中 api_token=输入参数的 api_token 的一条记录

指定路由使用中间件

Route::middleware('employeeToken')->prefix('employee')->group(function(){ });
  • /api/employee/**/* 路由都使用 employeeToken
  • /api/employee/**/* 下路由对应的 Controller 中直接使用 request->user() 方法即可获取对应的访问 employee 表记录
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 490 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 760 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...