API Token Authentication

478 查看

Laravel 5.2 新增了很多的新特性,包括了内置多用户认证表单数组输入验证隐式路由模型绑定中间件组的定义中间件 throttle 访问频率限制等主要功能。

即将发布的 Laravel 5.3 也新增了不少新的特性:全局辅助函数 cache() 查询构造器 where / update 新增 JSON 属性操作语法Blade 模板新增 $loop 变量更简单的分页实现图片尺寸验证规则等。Laravel 5.3 相对于 Laravel 5.2 变化有点大,简化了 app 的目录结构,并将路由分离出来。

本文主要介绍一下 Laravel 5.2 下使用 API Token Authentication, Laravel 5.2 带有了 TokenGuard 类。你可以让用户的 api_token 追加到 API 请求的后面,并用 api_token 验证请求,分为 Laravel5.2Laravel5.2 版本。

设置 api_token 字段并修改 User 模型

首先:

你要先给你的 users 表添加 api_token 的字段。

// Laravel5.2 和 Laravel5.3 一样
$table->string('api_token', 60)->unique();

如果你的项目刚创建,将上述的字段添加到 users_table migration

如果你的项目并不是新创建的,那么你可以去添加一个 migrationusers 表添加 api_token 字段。

然后:

User 模型中的 $fillable$hidden 添加 api_token 字段

// Laravel5.2 和 Laravel5.3 一样

project $fillable = ['name', 'email', 'password', 'api_token'];

project $hidden = ['password', 'remember_token', 'api_token'];

用户创建时默认生成 api_token

由于 Laravel5.2Laravel5.3 创建内置的用户认证目录结构不一样,所以:
Laravel5.2:只需在 App\Http\Controllers\Auth\AuthController 中的 create 方法添加:
Laravel5.3:则在 App\Http\Controllers\Auth\RegisterController 中的 create 方法添加:

//将此代码添加到创建用户的数组中
'api_token' => str_random(60)

添加相对应的路由

我们要确保我们所有的 API 都通过使用 auth:api 中间件保护。

Laravel5.2

//将此代码放置到路由中。
Route::group([
    'prefix'     => 'api',
    'middleware' => ['api', 'auth:api']
], function () {
    //Write Routes
});

Laravel5.3:由于 Laravel5.3 已将 api 的路由单独分离出来,因此只需在 routes\api.php 中添加路由规则。路由组定义可以到 app\Providers\RouteServiceProvider 中的 mapApiRoutes 方法查看。

通过在 auth 中间件后添加 :api ,告诉 Laravel 我们想使用设置在 config/auth.php 下的 apiguard 和 默认为 token

任何在 API 路由组的路由,所有的请求都需要验证 api_token

获取 User 记录

// Laravel5.2 和 Laravel5.3 一样
Auth::guard('api')->user();

这样的写法是为了让 Laravel 知道,我们想调用的是 api guard,而不是调用默认的 web guard

本文参照API Token Authentication in Laravel 5.2
更多请关注PIGJIAN BLOG