在Laravel中验证API用户的超简单方法
自从 Laravel 5.3 推出以来,Laravel Passport 成为了对 API 消费者进行身份验证的主要方式。这是 Laravel 文档中描述的唯一方法。如果你在 Laravel 文档网站上搜索“auth:api”,唯一的结果都会与 Laravel Passport 相关。
然而,在某些情况下,你可能并不需要 Laravel Passport 提供的复杂功能。例如,如果你只是为用户提供几个 API 路由,用于更新数据,那么你可能不需要一个完整的 OAuth 系统,也不需要多个数据库表来存储可能过期的令牌,更不需要引入整个 Laravel Passport 包。
第一步:配置数据库
首先,你需要为用户提供一个 API 令牌,并将其存储在数据库中。最简单的方式是将令牌存储在用户表中。以下是迁移代码示例:
// 创建迁移文件
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('api_token', 36)->unique();
});
}
// 回滚迁移
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('api_token');
});
}
第二步:生成令牌
在数据库配置完成后,你需要为用户生成 API 令牌。你可以选择让用户手动生成令牌,或者为每个用户自动生成一个。以下是使用 Laravel 5.6 提供的 UUID 生成器的示例代码:
// app/User.php
public function setNewApiToken()
{
$this->api_token = Str::uuid();
$this->save();
}
// 使用示例
auth()->user()->setNewApiToken();
// 或者
$user->setNewApiToken();
第三步:检查配置文件
Laravel 默认的 auth.php 配置文件已经为 API 令牌认证做好了准备。你只需要确保它的配置正确即可:
// config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token', // 这是关键配置
'provider' => 'users',
],
],
第四步:添加中间件
所有 API 路由都应放置在 routes/api.php 文件中。对于需要身份验证的路由,可以使用 auth:api 中间件,如下所示:
// routes/api.php
Route::post('post', 'Api\PostController@store')->middleware('auth:api');
用户需要在请求中添加查询字符串参数,例如 api_token=UNIQUE_TOKEN。如果你的网站使用 JavaScript 进行 AJAX 调用,也可以通过以下方式传递令牌:
axios.put('/api/user/profile', {
name: this.newName,
some_field: this.newFieldValue,
}, {
params: {
'api_token': this.user.api_token
}
}).then(response => {
// 处理响应
});
第五步:启用令牌认证
Laravel 文档中没有详细说明如何启用令牌认证,但实际上 Laravel 已经提供了所需的一切。你只需要在 AuthServiceProvider.php 中注册相关类即可:
// app/Providers/AuthServiceProvider.php
use IlluminateAuthTokenGuard;
use IlluminateSupportFacadesAuth;
public function boot()
{
$this->registerPolicies(); Auth::extend('token', function ($app, $name, array $config) {
return new TokenGuard(
Auth::createUserProvider($config['provider']),
$app->request
);
});
}
以上代码会注册一个新的 TokenGuard,用于处理基于令牌的用户认证。值得庆幸的是,Laravel 已经内置了 TokenGuard 类,你只需要知道如何使用它。
通过以上步骤,你可以轻松地在 Laravel 中实现基于 API 令牌的用户认证,而无需引入 Laravel Passport 的复杂性。这种方法特别适合那些只需要简单 API 身份验证的场景。
原文链接: https://mydnic.be/post/super-easy-way-to-authenticate-an-api-user-in-your-laravel-application-without-using-laravel-passport
最新文章
- 常用的14条API文档编写基本准则
- Python 使用 话费 API:轻松实现自动话费查询功能
- API调用 – 什么是API调用?
- 如何设计一个对外的安全接口?
- 2025 LangGraph AI 工作流引擎|可视化多 Agent 协作+节点扩展教程
- 口型同步服务:让视频开口说话
- Claude API在中国停用后的迁移与替代方案详解
- 2026年十大PHP REST API框架
- 使用NestJS开发安全API:角色管理 – Auth0
- 使用REST Assured进行API自动化测试(全面指南)
- 使用 Go 1.22 和 http.ServeMux 构建 REST API | 作者: Shiju Varghese
- 掌握API端到端测试:全面指南