2024-06-02 渥太华微生活

Laravel Sanctum 提供了一个轻量级的认证系统,可用于 SPA(单页应用程序)、移动应用程序和基于简单令牌的 API。
Sanctum 允许应用程序中的每个用户为他们的账户生成多个 API 令牌。这些令牌可以被授予权限 / 范围,以指定令牌允许执行哪些操作。
除非您需要所有的oauth服务,否则还是更推荐您使用轻量级的Sanctum进行认证处理。
1、创建项目
composer create-project laravel/laravel laravel-sanctum
通过下面命令启动本地服务器,访问 http://127.0.0.1:8000 检查是否成功。
php artisan serve
2、安装Sanctum
使用下面一个命令将安装Sanctum的扩展包、配置和迁移文件,并添加API路由。
php artisan install:api
3、修改配置文件
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=my_db DB_USERNAME=my_user DB_PASSWORD=my_pwd
4、修改User model:
添加 Laravel\Sanctum\HasApiTokens trait 进入User model.
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}5、模拟数据:
修改 database\seeders\DatabaseSeeder.php 文件:
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
User::factory()->create([
'name' => 'User1',
'email' => '[email protected]',
]);
}
}运行下面命令产生用户数据。
php artisan db:seed
6、添加访问路由:
修改 routes\api.php 文件
<?php
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::post('/tokens/create', function(Request $request) {
$user = User::find(1);
$token = $user->createToken($user->name);
return ['token' => $token->plainTextToken];
});
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});7、测试获取token:
用 postman 测试:
URL: http://127.0.0.1:8000/api/tokens/create Method: post
结果拿到User1的token,
{
"token": "1|DfapLtnxCtKW7TxUmR7lnzCm978K5xOqcp2D0ilq9d6caf12"
}如下图:

8、测试其他接口:
用 postman 测试:
1) 当没有带token访问时
URL: http://127.0.0.1:8000/api/user Method: get
得到 RouteNotFoundException,如下图:

2) 当带token访问时
URL: http://127.0.0.1:8000/api/user Method: get Authorization --> Bearer Token: 1|DfapLtnxCtKW7TxUmR7lnzCm978K5xOqcp2D0ilq9d6caf12
带上 Authorization Bearer Token 后,得到正常的用户信息,如下图:

3) 修改一下路由,再次带token访问时:
路由如下:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user()->tokens;
});postman 设置:
URL: http://127.0.0.1:8000/api/user Method: get Authorization --> Bearer Token: 1|DfapLtnxCtKW7TxUmR7lnzCm978K5xOqcp2D0ilq9d6caf12
带上 Authorization Bearer Token 后,得到用户所有的token信息:
[
{
"id": 1,
"tokenable_type": "App\\Models\\User",
"tokenable_id": 1,
"name": "User1",
"abilities": [
"*"
],
"last_used_at": "2024-06-03T21:04:15.000000Z",
"expires_at": null,
"created_at": "2024-06-03T20:26:19.000000Z",
"updated_at": "2024-06-03T21:04:15.000000Z"
}
]如下图:

编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。
| 全部评论 (0) |
|---|