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) |
---|