laravel - 带有 Vue 3 API 调用的 Laravel sanctum
问题描述
我正在使用 Laravel 后端和 Vue3 构建一个应用程序。这两个应用程序位于不同的域中。我正在从 Vue 进行 axios API 调用。在 Laravel 上,我安装了 Sanctum 来处理我的授权、登录等......我尝试了很多东西,从存储令牌到 localStorage(不是一个好习惯,因为它不安全)。所以我读了更多,发现我必须发送 -withCredentials: true
它会用 cookie 处理一切,开箱即用。这没用。然后我读到如果它们在不同的域上,它就不起作用。我不知道如何处理这个了。
这一切都是真的吗?sanctum 有路要走吗?如果没有,安全身份验证的最佳方式是什么?它会在相同的域上工作吗?有没有办法在不同的域上工作?
有谁知道如何处理这个问题?
谢谢!!!
解决方案
拥有 2 个域不会改变任何事情。逻辑很简单。基本上你有一个令牌(密钥),你将与这个密钥进行通信。满足条件时,您将向客户端发送令牌。之后,客户说“如果这是您的令牌,请提供我的凭据。”
只需使用圣所令牌:
$user->createToken($request->name)->plainTextToken;
如果满足条件,则返回 Bearer 令牌:
Authorization: Bearer <token>
并使用 sanctum 中间件保护您的路线:
Route::middleware('auth:sanctum')->get('/user', function (Request $request)
最后,如果密钥正确:
return response($user, 200);
推荐阅读
- postgresql - 使用 SQL,我可以在分组时在一个表中显示总和和部分总和吗?
- python - '读取请求时出现异常','详细信息':'无法解码:java.io.StringReader@1aac9ea'},'状态':'失败'}
- xml - 使用 XSLT 重命名 XML 标记
- angular - 如何在 Angular 7 中对 Web 服务进行 POST API 调用?
- java - 客户端休息 Api 不使用服务器中声明的方法
- azure - Azure DevOps 发布 - 无法获取应用服务“ABC”发布凭据 - 400 错误请求
- javascript - TypeError: undefined is not an object ('_this.props')
- airflow - 开发 DAG,将大量 csv 文件并行上传到数据库
- c# - how to select columns from two table with where using linq
- javascript - 是否可以将变量从客户端脚本传递到服务器脚本?