首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Laravel应用程序中Ajax/Axios请求的API身份验证?

在Laravel应用程序中Ajax/Axios请求的API身份验证?
EN

Stack Overflow用户
提问于 2020-09-25 21:01:01
回答 1查看 732关注 0票数 0

在Laravel上,默认情况下,api中间件组不包括StartSessionVerifyCsrfToken。相反,它依赖于auth:api,它为每个请求期望一个api_token值。

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

我应该如何配置我的Kernel.php/$middlewareGroups/api以同时使用api_token和现有的用户会话?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-25 22:11:28

你把你的Vue应用程序组件保存在laravel应用程序中。这关心的是保持会话。在布局的头中添加csrf令牌

代码语言:javascript
运行
复制
<meta name="csrf-token" content="{{ csrf_token() }}">

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

默认情况下,带有令牌的Api身份验证是打开的(据我所知)。你得多走几步。

  1. 在用户表、迁移、模型、寄存器控制器或要生成它们的位置添加api_token列。
  2. 在Laravel的布局刀片中显示api令牌。它将把apiToken挂载到Laravel对象,让Vue看到它。
代码语言:javascript
运行
复制
    <script>
        window.Laravel = {!! json_encode([
            'apiToken' => auth()->user()->api_token ?? null,
        ]) !!};
    </script>

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

  1. 将以下标题添加到axios设置中
代码语言:javascript
运行
复制
window.axios.defaults.headers.common['Authorization'] = 'Bearer ' + Laravel.apiToken;

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

编辑:还有桑太姆用于简单的api身份验证

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64071269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档