创建自定义API接口异常类
vim app/Exceptions/ExceptionApi.php
<?php
namespace App\Exceptions;
use Exception;
class ExceptionApi extends Exception
{
protected $apiCode=400;
public function __construct($message = "", $code = 400)
{
$this->apiCode = $code;
parent::__construct($message, 200);
}
public function render(){
return response()->json(['msg' => $this->message,'code'=>$this->apiCode,'data'=>null], 200);
}
}
忽略异常日志报告
vim app/Exceptions/Handler.php
protected $dontReport = [ExceptionApi::class];
添加用户授权令牌字段
Laravel 自带的 users
数据表, 新增 api_token
字段
设置中间件路由
vim routes.php
Route::group(['middleware'=>'auth:api'], function (){
Route::get('/user', function () {
// return 'ok';
return new Response('hello TikBall');
});
});
请求添加 api_token 参数
http://your_site.com/api/user?api_token=123458
默认情况下,请求参数api_token
的值,会和users用户数据表的api_token字段值对比,相同则授权通过。
修改授权验证逻辑
# app/Http/Kernel.php
......
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
......
];
......
# app/Exceptions/ExceptionApi.php
......
use App\Exceptions\ExceptionApi;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
public function handle($request, Closure $next, ...$guards)
{
$token = $request->input('api_token');
$user = User::query()->where(['api_token'=>hash('sha256', $token)])->first();
if (empty($guards)) {
$guards = [null];
}
foreach ($guards as $guard) {
// if($this->auth->guard($guard)->guest()){
// throw new ExceptionApi(' auth access refuse');
// }
if ($this->auth->guard($guard)->check()) {
$this->auth->shouldUse($guard);
}
}
return $next($request);
}
}
Laravel 使用 JWT 实现 API Auth, 打造用户授权接口 https://learnku.com/articles/6216/laravel-uses-jwt-to-implement-api-auth-to-build-user-authorization-interfaces