使用Laravel9的Sanctum REST API 身份验证示例

使用Laravel9的Sanctum REST API 身份验证示例

在本教程中,我将向您展示如何使用 sanctum 在您的 Laravel 9 应用程序中创建 api 身份验证。你知道 Laravel Sanctum 为单页应用程序、移动应用程序和简单的基于令牌的 API 提供了一个很酷的身份验证系统。Laravel Sanctum 允许我们应用程序的每个用户为其帐户生成多个 API 令牌。

我认为 Laravel sanctum 是创建单页 api 身份验证的好选择。出于这个原因,我将向您展示如何使用 laravel 9 sanctum API 身份验证示例。从这个 Laravel 9 sanctum 教程中,您将学习使用 sanctum 的 laravel 9 REST API 身份验证系统。完成本教程后,我们可以看到 laravel 9 sanctum spa API 示例。

第 1 步:安装 Laravel 9

第一步,我们需要获取一个新的 Laravel 9 应用程序来进行我们的 laravel sanctum spa 身份验证,因此打开您的终端或命令提示符并运行以下命令:

composer create-project --prefer-dist laravel/laravel ApiAuth

第 2 步:安装Sanctum

Laravel9已经默认安装,其它版本如果没有安装Sanctum, 我们可以通过 Composer 包管理器安装 Laravel Sanctum。安装它的命令很有趣:

composer require laravel/sanctum

然后运行配置文件:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

生成迁移数据,也就是在数据库中创建表:

php artisan migrate

接下来,如果您打算使用 Sanctum 对 SPA 进行身份验证,则应将 Sanctum 的中间件添加到 api 应用程序的中间件组中。 app/Http/Kernel.php

/app/Http/Kernel.php
'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],
  

步骤 3:配置用户模型

在我们将用于圣所的模型中,必须像下面这样配置。添加 Sanctum 的 HasApiTokens 类,在 auth.php 中,我们添加了 api auth 配置。

app/Models/User.php
namespace App\Models;
  
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
  
class User extends Authenticatable
{
    use HasFactory, Notifiable, HasApiTokens;
  
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];
  
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];
  
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

第 4 步:创建 API 路由

在这一步中,我们需要创建 API 路由。Laravel 提供了一个 api.php 文件用于编写 Web API 路由。因此,让我们在该文件上创建以下路由。

/routes/api.php
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;

// Public routes
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);

// Protected routes
Route::group(['middleware' => ['auth:sanctum']], function () {
    Route::post('/logout', [AuthController::class, 'logout']);
});

第 5 步:创建控制器

是时候在我们的控制器中编写我们的身份验证代码了。创建控制器并将以下代码粘贴到该控制器中

/app/Http/Controllers/AuthController.php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller
{
    public function register(Request $request) {
        $fields = $request->validate([
            'name' => 'required|string',
            'email' => 'required|string|unique:users,email',
            'password' => 'required|string|confirmed'
        ]);

        $user = User::create([
            'name' => $fields['name'],
            'email' => $fields['email'],
            'password' => bcrypt($fields['password'])
        ]);

        $token = $user->createToken('myapptoken')->plainTextToken;

        $response = [
            'user' => $user,
            'token' => $token
        ];

        return response($response, 201);
    }

    public function login(Request $request) {
        $fields = $request->validate([
            'email' => 'required|string',
            'password' => 'required|string'
        ]);

        // Check email
        $user = User::where('email', $fields['email'])->first();

        // Check password
        if(!$user || !Hash::check($fields['password'], $user->password)) {
            return response([
                'message' => 'Bad creds'
            ], 401);
        }

        $token = $user->createToken('myapptoken')->plainTextToken;

        $response = [
            'user' => $user,
            'token' => $token
        ];

        return response($response, 201);
    }

    public function logout(Request $request) {
        auth()->user()->tokens()->delete();

        return [
            'message' => 'Logged out'
        ];
    }
}

一切准备就绪。现在启动您的服务器并打开您的邮递员来测试我们的 sanctum 身份验证 api。

注册 API
API:http://127.0.0.1:8000 /api/register

请求:POST

登录接口
API:http://127.0.0.1:8000 /api/login

请求:POST

在测试注销 api 之前,请确保详细 api 我们将使用以下标题,如下所示:

'headers' => [

    'Accept' => 'application/json',

    'Authorization' => 'Bearer '.$accessToken,

]
注销接口
API:http://127.0.0.1 :8000/api/logout

请求:POST 

Loading...