首页 > 解决方案 > Laravel 应用程序中 Ajax/Axios 请求的 API 身份验证?

问题描述

默认情况下,在 Laravel 上,api中间件组不包括StartSession也不包括VerifyCsrfToken. 相反,它依赖于每个请求auth:apiapi_token期望值。

在我的例子中,Vue 前端使用 Axios 在后端的 API ( /api/...) 上发出请求。由于用户在前端登录,它可以简单地使用与该web部分相同的中间件。

我应该如何配置我的Kernel.php//以将 API 与$middlewareGroups现有用户会话一起使用?apiapi_token

标签: phplaravelapiauthentication

解决方案


您将 Vue 应用程序组件保存在 laravel 应用程序中。这关心保持会话。在您的布局头部添加csrf token

<meta name="csrf-token" content="{{ csrf_token() }}">

如果您使用 axios,文档它将自动添加。

默认情况下,使用令牌进行 Api 身份验证(据我记得)。你必须再做几个步骤。

  1. 将 api_token 列添加到用户表、迁移、模型、注册控制器或您想要生成它们的位置。
  2. 在 Laravel 的布局刀片中显示 api 令牌。它将 apiToken 挂载到 Laravel js 对象,以便 Vue 看到它。
    <script>
        window.Laravel = {!! json_encode([
            'apiToken' => auth()->user()->api_token ?? null,
        ]) !!};
    </script>

在 html 中显示它可能是有问题的,但由于它是一个单一的应用程序,并且您必须登录才能将您的组件与 api 连接 - 它可能没问题。

  1. 将以下标题添加到您的 axios 设置中
window.axios.defaults.headers.common['Authorization'] = 'Bearer ' + Laravel.apiToken;

我希望它会帮助你。如果有人反对这种做法,我很乐意听到批评。我不喜欢这种在 js 脚本中打印 php 变量的方式。也许有更优雅的解决方案。

编辑:还有用于简单 api 身份验证的Santcum


推荐阅读