Laravel开发:如何使用Laravel Sanctum实现API身份验证和授权?

2023年 8月 5日 32.2k 0

Laravel是一款流行的PHP Web开发框架,它提供了许多强大的功能和工具来简化Web应用程序的开发和维护。Laravel Sanctum是Laravel框架的一个插件,它提供了API身份验证和授权的功能,可以轻松地保护您的API端点免受未经授权的访问。

在本文中,我们将学习如何使用Laravel Sanctum实现API身份验证和授权。

一、什么是Laravel Sanctum?

Laravel Sanctum是一个轻量级的身份验证包,它提供了简单但强大的API身份验证和授权功能。它基于Laravel中间件和HTTP认证,允许我们安全地将身份验证令牌附加到API请求中。

Laravel Sanctum支持两种身份验证方式:基于Cookie的身份验证和基于Token的身份验证。基于Cookie的身份验证使用Laravel中间件来验证请求中是否存在有效的认证Cookie。另一种验证类Header中的Token并检查其是否有效。

二、安装Laravel Sanctum

在开始之前,我们需要先安装Laravel Sanctum。使用composer包管理器可以轻松地安装Laravel Sanctum:

composer require laravel/sanctum

登录后复制

当然了,也可以通过在composer.json文件中添加以下要求来手动安装:

{
"require": {
"laravel/sanctum": "^2.9"
}
}

登录后复制

完成后,运行以下命令来发布Laravel Sanctum配置文件和数据库迁移文件:

php artisan vendor:publish --tag=sanctum-config
php artisan vendor:publish --tag=sanctum-migrations
php artisan migrate

登录后复制

三、配置Laravel Sanctum

  • 首先,需要添加laravel / sanctum中间件到您的应用程序的HTTP内核中。
  • 修改app/Http/kernel.php文件,添加Sanctum中间件:

    // app/Http/Kernel.php

    protected $middleware = [
    // ...
    LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,
    ];

    protected $middlewareGroups = [
    'web' => [
    // ...
    ],

    'api' => [
    LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    IlluminateRoutingMiddlewareSubstituteBindings::class,
    ],
    ];

    登录后复制

    这将确保在每个请求期间都可以使用Sanctum的基于Cookie的身份验证。

  • 接下来,需要配置auth配置文件。
  • 打开config/auth.php文件,找到defaults和guards并将它们配置为使用sanctum。

    // config/auth.php

    'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
    ],

    'guards' => [
    'web' => [
    'driver' => 'session',
    'provider' => 'users',
    ],

    'api' => [
    'driver' => 'sanctum',
    'provider' => 'users',
    'hash' => false,
    ],
    ],

    登录后复制

    这将允许我们使用Sanctum进行基于Token的身份验证。

  • 添加Sanctum提供者。
  • 如果您使用的是新版本的Laravel,则不需要添加提供者。如果您使用的是旧版本,请打开config/app.php文件并在providers数组中添加以下行:

    LaravelSanctumSanctumServiceProvider::class,

    登录后复制

    四、创建授权令牌

    现在,我们已经配置了Laravel Sanctum,接下来我们将了解如何使用Sanctum来创建授权令牌。

  • 在用户登录后,在users表中为该用户创建一个API令牌。
  • public function createToken(Request $request)
    {
    $user = Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')]);

    if($user) {
    $token = $user->createToken('API Token')->plainTextToken;

    return response()->json([
    'token' => $token,
    ]);
    } else {
    return response()->json([
    'message' => 'Invalid credentials',
    ], 401);
    }
    }

    登录后复制

  • 创建令牌后,您可以将其添加到每个请求的Authorization标头中。可以在axios请求中如下设置:
  • axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;

    登录后复制

    五、实现API身份验证和授权

    在创建了授权令牌后,我们可以使用Sanctum来保护API端点免受未经授权的访问。我们可以使用Laravel路由中间件来检查认证令牌并拒绝未经授权的访问。

  • 首先,在api.php文件中定义受保护的API路由。
  • // routes/api.php

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

    登录后复制

    此路由将使用Sanctum auth中间件保护。

  • 接下来,访问受保护的路由并查看结果。可以通过以下命令进行测试:
  • php artisan serve

    登录后复制

    现在,可以访问 /api/user 路由以查看已登录的用户的详细信息。现在,如果没有授权标头,将不会能够访问它并返回401未经授权的HTTP状态码。

    六、结尾

    Laravel Sanctum是一个强大且易于使用的身份验证和授权解决方案,可以在Laravel Web应用程序和Web API中轻松实现身份验证和授权。它可以轻松地保护您的API端点免受未经授权的访问,并使您可以轻松地控制哪些用户可以访问哪些API端点。在这篇文章中,我们学习了如何安装和配置Laravel Sanctum,并了解了如何使用它来创建授权令牌和实现API身份验证和授权。

    以上就是Laravel开发:如何使用Laravel Sanctum实现API身份验证和授权?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论