php - Laravel 应用程序中 Ajax/Axios 请求的 API 身份验证?
问题描述
默认情况下,在 Laravel 上,api
中间件组不包括StartSession
也不包括VerifyCsrfToken
. 相反,它依赖于每个请求auth:api
的api_token
期望值。
在我的例子中,Vue 前端使用 Axios 在后端的 API ( /api/...
) 上发出请求。由于用户在前端登录,它可以简单地使用与该web
部分相同的中间件。
我应该如何配置我的Kernel.php
//以将 API 与$middlewareGroups
现有用户会话一起使用?api
api_token
解决方案
您将 Vue 应用程序组件保存在 laravel 应用程序中。这关心保持会话。在您的布局头部添加csrf token:
<meta name="csrf-token" content="{{ csrf_token() }}">
如果您使用 axios,文档说它将自动添加。
默认情况下,使用令牌进行 Api 身份验证(据我记得)。你必须再做几个步骤。
- 将 api_token 列添加到用户表、迁移、模型、注册控制器或您想要生成它们的位置。
- 在 Laravel 的布局刀片中显示 api 令牌。它将 apiToken 挂载到 Laravel js 对象,以便 Vue 看到它。
<script>
window.Laravel = {!! json_encode([
'apiToken' => auth()->user()->api_token ?? null,
]) !!};
</script>
在 html 中显示它可能是有问题的,但由于它是一个单一的应用程序,并且您必须登录才能将您的组件与 api 连接 - 它可能没问题。
- 将以下标题添加到您的 axios 设置中
window.axios.defaults.headers.common['Authorization'] = 'Bearer ' + Laravel.apiToken;
我希望它会帮助你。如果有人反对这种做法,我很乐意听到批评。我不喜欢这种在 js 脚本中打印 php 变量的方式。也许有更优雅的解决方案。
编辑:还有用于简单 api 身份验证的Santcum
推荐阅读
- ssl - 需要使用开放 SSL 创建证书
- javascript - 修复 CSS 悬停时的按钮样式?
- sql - 在其中一列中将英亩转换为平方英尺
- elasticsearch - 严格使用 ElasticSearch 映射
- python - 如何在 Lynx 等 webbrowser 或 python webbrowser 上添加 xmpp 或矩阵协议?
- html - 如何从 ExpressJS 路由保存呈现的 html 视图文件
- php - 在布尔值中调用成员函数 fetch() 时出错
- tomcat - javax.management.AttributeNotFoundException 8.5.35 及以上
- ios - iMessage 应用程序处于折叠状态时按钮不起作用
- mysql - 如何每天对 mySQL 中的数据进行分组?