我花了几天时间在 Laravel Sanctum 上试图弄清楚如何设置我的身份验证系统。
我正在为我的公司构建一个票务 Web 应用程序,为此我决定构建一个 API 和一个使用该 API 的 React 前端应用程序。该应用程序的最终用户需要一个帐户来管理票证,因此我在数据库中创建了一个用户表,并为 API 创建了多个路由来创建、删除和更新用户。为了管理用户 api 身份验证,我决定使用 Laravel Sanctum 及其内置的基于会话的 SPA 身份验证系统。
为此,我按照指南设置所有需求,以确保前端已准备好与 laravel sanctum 一起使用。这是我用于 api 中间件的 Kernel.php :
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
以及 web.php 中通过 Laravel Sanctum SPA 身份验证登录/注销用户的路由。
<?php
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
Route::post('/login', [UserController::class, 'login']);
Route::get('/logout', [UserController::class, 'logout']);
我必须构建一个非 Web 应用程序,特别是需要在 dabatase 中获取数据并使用 API 的 /api/tickets
端点和 POST
方法来创建新的 Windows 服务带有这些数据的票。
我知道这个未来的 Windows 服务不是前端应用程序,所以我不能使用 SPA 身份验证系统。相反,我想在 Laravel Sanctum 中使用令牌来验证服务。
我的问题是:
users
身份验证和
service
身份验证。http://myapi.net/login
et
http://myapi.net/logout
用于最终用户身份验证,我需要
创建类似 api/auth/service
的路由来发送和删除令牌?service
的新表还是保留
与 user
表?答案 0 :(得分:0)
我在一个具有类似背景的项目中工作。我所做的是根据他们允许使用 API 的用途来建立用户配置文件。为此使用 Sanctum 令牌能力: https://laravel.com/docs/8.x/sanctum#token-abilities
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
$token = $user->createToken('app-token', ['service'])->plainTextToken;
...其中“服务”将是您要检查的能力。在 /login 端点中将此令牌作为 API-KEY 返回。
Route::middleware('auth:sanctum')->post('/updatesomething', 'something@update');
public function update(Request $request){
if ($user->tokenCan('service')) {
//do allowed actions to user profile 'service'
}
}
通过这种方式,您现在可以使用带有“服务”配置文件的 API,并使用以下请求中 /login 中收到的令牌进行身份验证。您应该将其包含在像“Bearer Token”这样的标题中。 您可以选择在 API 中创建注销方法,并在您认为合适时撤销令牌:
$user->tokens()->delete();