从 Laravel 5.2 开始, Laravel 的将路由的配置进行了分拆, 在 routes 目录下有 web.php 和 api.php 两个路由的配置。 api.php 中用来放你的api 开放接口, 用作一种无状态的认证机制。
基本上就是通过在 url 的 querystring 中带一个参数 api_token 然后到服务器端用户表中找到此用户。
在Laravel 文档中对这块基本上没有说明。下面来看下实现步骤:
配置步骤
1. 首先要在用户表中添加 api_token 字段
你可以修改Laravel自带的迁移文件
打开 database/migrations/2014_10_12_000000_create_users_table.php
添加 api_token 字段
1 | Schema::create('users', function (Blueprint $table) { |
然后你可以重置并重新运行migration
1 | php artisan migrate:reset |
2.设置路由
在 routes/api.php 中设置我们的路由
1 | Route::prefix('v1')->middleware('auth:api')->group(function() { |
使用 prefix 方法将 group 中的所有路由规则的url都加上 v1(版本号) 前缀,所以实际的请求地址是 :/api/v1/notes/{id}
middleware 使用 auth:api
, :api
代表使用的 Guard(看门)类, 在 config/auth.php 中可以看到 api
Guard 的驱动设置的是 token, 这表示所有使用了 auth:api
中间路由规则,请求中都必须带 api_token 参数
打开 config/auth.php 配置稍微解释下
1 | 'defaults' => [ |
这个配置表示 默认的 guard 是web,意思是如果直接使用 meddleware('auth')
其实是 meddleware('auth:web')
1 | 'guards' => [ |
指名了各个guard所使用的驱动,web的话是session,api的话就是 token。
3.用户注册时,需生成一个api_token
在 App\Http\Controllers\Auth\RegisterController.php文件的创建用户中添加 api_token 字段;
1 | /** |
最后,不要忘记在 App\User.php用户模型表中的 $fillable 属性当中添加api_token字段:
1 | protected $fillable = |
如何获取用户信息Auth::guard('api')->user();
使用
有关token认证的原理,我们可以看该目录下的底层方法:vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php
1.重写resource\assets\js\bootstrap.js认证方法:
1 | /* |
2. app.blade.php中增加api_token 判断
相关文章:
Laravel 的 API 认证系统 Passport
Laravel5.4 Vue 框架中 X-CSRF-TOKEN 的两种设置方法
【日常填坑】之ajax请求laravel的api接口