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

2023年 8月 6日 67.5k 0

Laravel Sanctum是一个轻量级的身份验证包,能够让你在Laravel应用中轻松地实现API认证和SPA(单页应用程序)认证。在本文中,我们将探讨如何使用Laravel Sanctum来实现SPA和API身份验证。

首先,让我们看看什么是SPA和API认证。

SPA认证是指单页应用程序,它不会重新加载整个页面,而是使用AJAX从Web服务器请求信息,以此更新局部内容。当使用SPA时,需要对API进行身份验证,以确保只有经过身份验证的用户才能访问它们。

API认证是指API请求身份验证过程。当客户端发送请求时,API需要验证该请求是否来自所期望的用户,以此保证API端点仅由经过身份验证的用户使用。

下面是如何使用Laravel Sanctum实现SPA和API身份验证的步骤:

1、安装Laravel Sanctum我们可以使用composer包管理器安装Laravel Sanctum。在Laravel项目中运行以下命令:

composer require laravel/sanctum

登录后复制

2、运行Laravel Sanctum的安装器Laravel Sanctum提供了一个安装器,可以在安装时自动配置我们的应用程序。我们可以使用以下命令运行此安装器:

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

登录后复制

3、运行迁移我们需要运行Sanctum迁移来创建必要的数据库表,以支持Sanctum的操作。运行以下命令:

php artisan migrate

登录后复制

4、配置应用程序我们需要将Laravel Sanctum添加到我们的中间件堆栈中:

'api' => [
'middleware' => ['auth:sanctum'],
'throttle:60,1',
'prefix' => 'api',
'namespace' => 'AppHttpControllersAPI',
],

登录后复制

5、为用户颁发身份验证令牌在Laravel Sanctum中,我们可以使用tokenCan方法检查令牌是否具有特定的API权限。我们可以使用createToken方法为用户颁发身份验证令牌:

use IlluminateHttpRequest;

/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$user = User::find(1);
$token = $user->createToken('token-name', ['server:update'])->plainTextToken;

return response()->json([
'access_token' => $token,
'token_type' => 'Bearer',
]);
}

登录后复制

这将为用户创建一个名为‘token-name’的令牌,该令牌具有server:update权限。

6、保护API端点在我们的控制器中,我们可以使用“middleware”方法来保护API端点:

public function update(Request $request, $id)
{
if (!$request->user()->tokenCan('server:update')) {
abort(403, 'Unauthorized');
}

// Update the server
}

登录后复制

在这个例子中,我们只允许那些具有server:update权限的用户访问update方法。

7、在SPA中使用身份验证令牌在我们的SPA中,我们可以使用Sanctum的@auth和@csrf Blade指令来获取身份验证令牌:

Laravel

{{ config('app.name', 'Laravel') }}

    @guest

  • {{ __('Login') }}
  • @if (Route::has('register'))

  • {{ __('Register') }}
  • @endif
    @else

  • {{ Auth::user()->name }}

    {{ __('Logout') }}

    @csrf

  • @endguest

@yield('content')

@auth

window.Laravel = {!! json_encode([
'csrf_token' => csrf_token(),
'api_token' => Auth::user()->api_token
]) !!};

@endauth

登录后复制

在这个例子中,我们使用了Sanctum的@auth和@csrf Blade指令,用于获取用户身份验证令牌和CSRF令牌。

这就是如何使用Laravel Sanctum实现SPA和API身份验证的全部内容。使用Laravel Sanctum可以轻松地保护我们的API端点和SPA应用程序,并帮助我们实现最佳安全实践。

以上就是Laravel开发:如何使用Laravel Sanctum实现SPA和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中的所有评论

发布评论