Laravel api token验证使用方法
从 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
字段
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
//添加 api_token 字段
$table->string('api_token', 60)->unique();
$table->rememberToken();
$table->timestamps();
});
然后你可以重置并重新运行migration
php artisan migrate:reset
php artisan migrate
2.设置路由
在 routes/api.php
中设置我们的路由
Route::prefix('v1')->middleware('auth:api')->group(function() {
// 取单条数据
Route::get('notes/{id}',function($id){
return Note::select('title', 'content')->find($id);
});
});
使用 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
配置稍微解释下
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
这个配置表示 默认的 guard
是web,意思是如果直接使用 meddleware('auth')
其实是 meddleware('auth:web')
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
指名了各个guard所使用的驱动,web
的话是session
,api
的话就是 token
。
修改 app/User.php
添加 api_token
字段
protected $fillable = [
'name', 'email', 'password','api_token'
];
如何获取用户信息
Auth::guard('api')->user();