📜  Laravel sanctum 认证 - PHP (1)

📅  最后修改于: 2023-12-03 15:02:35.554000             🧑  作者: Mango

Laravel Sanctum 认证 - PHP

Laravel Sanctum 是 Laravel 官方推出的前端无状态身份验证包。它提供了一个简单、轻量、易于使用的 API 身份验证(例如基于 token 的身份验证),让开发者可以使用 Laravel 提供的身份验证服务来保护他们的 API。

Sanctum 是一个完整的身份验证系统,可以使用 API token 或 cookie 作为身份验证令牌,并可以为不同的身份验证方式设置不同的过期时间。

下面将介绍 Laravel Sanctum 的一些特性和用法。

特性
  • 轻量、易于安装和使用。
  • 无状态且不需要使用 session。
  • 基于安全 cookie 身份验证,也可以使用 API token 身份验证。
  • 支持多应用程序身份验证。
  • 可以定义多个身份验证“保护”,以保护不同的 API 端点。
  • 支持两个因素身份验证。
  • 验证失败时不返回详细的错误信息。
安装

在 Laravel 项目中使用 Laravel Sanctum 唯一的依赖是 Laravel 框架本身。您可以使用 Composer 安装 Laravel Sanctum:

composer require laravel/sanctum

安装 Sanctum 后,您需要运行数据库迁移以生成必要的表:

php artisan migrate
使用

安装并配置 Sanctum 后,您可以在应用程序中使用以下代码创建 Sanctum 声明(此代码应在应用程序的启动中注册):

// config/app.php

'providers' => [
    // ...
    Laravel\Sanctum\SanctumServiceProvider::class,
];

// app/Http/Kernel.php

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

protected $middlewareGroups = [
    'web' => [
        // ...
        EnsureFrontendRequestsAreStateful::class,
    ],
    // ...
];

创建 Sanctum Authentication 中间件:

php artisan make:middleware EnsureAuthenticated
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class EnsureAuthenticated
{
    public function handle(Request $request, Closure $next)
    {
        if (! Auth::guard('sanctum')->check()) {
            return response()->json([
                'message' => 'Unauthorized'
            ], 401);
        }

        return $next($request);
    }
}

将 EnsureAuthenticated 中间件添加到你项目需要认证接口请求的路由中:

use Illuminate\Support\Facades\Route;

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});
参考