前言
根据 Laravel 官方文档:api 认证
api 认证支持 Eloquent 与 database 方式,我这里的配置选用的是 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方法,传递一个闭包,使得Request的user()方法返回employee表中api_token=输入参数的api_token的一条记录
指定路由使用中间件
Route::middleware('employeeToken')->prefix('employee')->group(function(){ });
/api/employee/**/*路由都使用employeeToken- 在
/api/employee/**/*下路由对应的Controller中直接使用request->user()方法即可获取对应的访问employee表记录
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于