📜  laravel sanctum - Shell-Bash (1)

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

Laravel Sanctum - Shell-Bash

介绍

本文将介绍 Laravel Sanctum,一个为 Laravel 应用程序提供轻量级身份验证系统的库。Laravel Sanctum 通过使用 Laravel 8.x 中的 Cookie 会话驱动来验证用户。它简化了为 SPA、移动应用程序等前后端分离的应用程序设置 API 身份验证的过程。

参考文档:https://laravel.com/docs/8.x/sanctum

安装

在 Laravel 项目中使用 Composer 包管理器安装 Laravel Sanctum:

composer require laravel/sanctum
配置
  1. 运行数据库迁移命令以创建必要的数据库表:
php artisan migrate
  1. 在 Laravel 的 config/app.php 文件中添加以下服务提供者:
'providers' => [
    // ...
    Laravel\Sanctum\SanctumServiceProvider::class,
],
  1. 注册 Sanctum 的路由中间件。在 app/Http/Kernel.php 文件中的 $routeMiddleware 数组中添加以下内容:
'auth.sanctum' => \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
  1. 运行 Sanctum 的安装命令生成必要的配置文件和路由:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
使用

以下是使用 Laravel Sanctum 进行身份验证的基本步骤:

  1. App\Providers\RouteServiceProvider 类的 boot 方法中调用 Route::middleware 方法以应用 Sanctum 的身份验证中间件:
use Laravel\Sanctum\Sanctum;

public function boot()
{
    // ...
    Sanctum::routes();
}
  1. web 路由上定义登录和注销路由:
use Laravel\Sanctum\Http\Controllers\CsrfCookieController;

Route::group(['middleware' => 'web'], function () {
    // ...
    Route::post('/login', [LoginController::class, 'login']);
    Route::post('/logout', [LoginController::class, 'logout']);
    Route::get('/sanctum/csrf-cookie', CsrfCookieController::class);
});
  1. 在登录控制器中创建并返回 API 令牌:
use Laravel\Sanctum\HasApiTokens;

public function login(Request $request)
{
    // 验证用户,并在验证成功后为用户创建令牌
    $user = User::where('email', $request->email)->first();
    if ($user && Hash::check($request->password, $user->password)) {
        $token = $user->createToken('API Token')->plainTextToken;
        return response()->json(['token' => $token], 200);
    }
    
    return response()->json(['message' => 'Invalid credentials'], 401);
}

public function logout(Request $request)
{
    // 撤销用户的令牌
    $request->user()->tokens()->delete();
    return response()->json(['message' => 'Logged out successfully'], 200);
}
  1. 在需要进行身份验证的路由中使用 auth:sanctum 中间件:
Route::group(['middleware' => 'auth:sanctum'], function () {
    // 在这里定义需要进行身份验证的路由
});
总结

通过 Laravel Sanctum,我们能够轻松地为前后端分离的应用程序设置 API 身份验证。它提供了简单的方法来处理用户登录和令牌生成,让我们能够快速构建安全的应用程序。

以上是关于 Laravel Sanctum 的简介和基本用法。如需了解更多信息,请参考官方文档。