API Token Authentication

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
Nothing is impossible. —— @Jiajian Chan
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

帮顶 /手动滑稽

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!