Laravel 8 Sanctum SPA Auth - 未根据请求设置会话存储

作者:编程家 分类: laravel 时间:2025-08-17

Laravel 8 Sanctum SPA Auth - 未根据请求设置会话存储

在现代的 Web 应用程序中,用户身份验证和授权是非常重要的功能。Laravel 8 Sanctum 是一个流行的身份验证套件,专门为 SPA(单页面应用程序)开发设计。它提供了一种简单而强大的方式来处理身份验证和授权,并且与 Laravel 框架无缝集成。

在使用 Laravel 8 Sanctum 进行 SPA 身份验证时,一个常见的问题是未正确设置会话存储。这可能导致用户在每次请求时都需要重新进行身份验证,给用户体验带来不便。

问题分析

在默认情况下,Laravel 8 Sanctum 使用的是 Token 驱动的身份验证,而不是传统的基于会话的身份验证。这意味着每次请求都需要在请求头中带上身份验证令牌。如果未正确设置会话存储,每次请求都会被视为新的请求,需要重新进行身份验证。

解决方案

为了解决这个问题,我们需要在请求中设置会话存储。这样,当用户进行身份验证后,会话令牌将被存储在会话中,而不是仅仅依赖于请求头中的令牌。

首先,我们需要确保在前端应用程序中正确配置请求头。在使用 Axios 或其他 HTTP 客户端库时,我们可以在每个请求中添加一个拦截器来设置请求头。

在 Vue.js 应用程序中的 `main.js` 文件中,我们可以添加以下代码来设置请求头:

javascript

import axios from 'axios';

axios.interceptors.request.use((config) => {

const token = localStorage.getItem('token');

if (token) {

config.headers['Authorization'] = `Bearer ${token}`;

config.headers['Accept'] = 'application/json';

}

return config;

});

这段代码将在每个请求中添加一个名为 "Authorization" 的请求头,值为存储在本地存储中的身份验证令牌。

接下来,我们需要在 Laravel 后端应用程序中配置会话存储。打开 `config/sanctum.php` 文件,找到 `stateful` 选项并将其设置为 `true`。

php

'stateful' => true,

这样,Laravel Sanctum 将使用会话存储来存储用户的身份验证令牌。

最后,我们需要在路由中间件中添加 `EnsureFrontendRequestsAreStateful` 中间件。这个中间件将确保每个请求都使用会话存储进行身份验证。

在 `app/Http/Kernel.php` 文件的 `$middlewareGroups` 数组中,将 `EnsureFrontendRequestsAreStateful` 中间件添加到 `api` 中间件组中。

php

'api' => [

// ...

\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,

],

结束语

通过正确设置会话存储,我们可以解决 Laravel 8 Sanctum 在 SPA 身份验证中的一个常见问题。这样,用户将能够保持会话状态,而无需在每个请求中重新进行身份验证。这对于提高用户体验非常重要。

Laravel 8 Sanctum 提供了一种简单且强大的方式来处理 SPA 身份验证,使开发人员能够轻松地构建安全的 Web 应用程序。通过遵循上述解决方案,我们可以确保会话存储正确设置,并实现无缝的身份验证体验。

希望本文能帮助你解决 Laravel 8 Sanctum SPA 身份验证中的会话存储问题。祝你在开发安全的 Web 应用程序时取得成功!