问题标签 [laravel-sanctum]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2304 浏览

laravel-7 - 如何在包开发中使用 Laravel/sanctum

我尝试在自定义 Laravel 包中使用 Laravel/Sanctum。就像在默认的 Laravel 应用程序中一样,我将它添加到了 composer 文件中,添加了迁移并在路由文件中进行了设置。

出现下一条错误消息:

“未定义授权守卫[圣所]。”

我希望甚至可以在另一个包中使用圣所?

Composer.json 文件:

路线文件:

服务提供者

0 投票
1 回答
9006 浏览

angular - 未使用 Laravel Sanctum 和 Angular 为跨域请求设置 CSRF Coo​​kie

概述

我有一个本地托管在http://tenant.api.hydrogen.local的 Laravel 驱动的 api 和一个在http://localhost:8100上提供的 Angular 9.2 SPA 。我最近安装了 Laravel Sanctum 进行身份验证,并按照文档中列出的 SPA 说明进行操作,但 CSRF 令牌未附加到来自 SPA 的请求,因此我收到 CSRF 令牌不匹配错误。

//abc.api.hydrogen.local/sanctum/csrf按照指示,我在随后尝试登录之前先拨打了电话:

注意:我有一个拦截器,它在请求 url 前面加上 api url '//abc.api.hydrogen.local/' 例如,'sanctum/csrf-cookie' 将变成 '//abc.api.hydrogen.local/sanctum/ csrf-cookie'

来自 sanctum/csrf-cookie 的响应与预期的标头一起返回:

但是,当我查看浏览器控制台时,我没有看到存储 > cookie 中设置的任何内容。此外,在随后的“login/”调用中没有附加任何 cookie,并且我收到一个 CSRF 令牌不匹配错误。

我已经阅读了许多详细描述类似问题的帖子,并实施了他们的建议和配置,包括以下内容:

Laravel API

  • 在 .env 我设置了 SESSION_DRIVER=cookie 和 SESSION_DOMAIN=localhost:8100
  • 在 config/sanctum 我已将 localhost:8100 添加到有状态域
  • 在 config/cors 我设置了 supports_credentials = true 并允许所有路径、标题和来源(使用 '*' 值)

角SPA

  • 我已经实现了一个全局拦截器,它将 withCredentials = true 设置为所有请求
  • 我确保我的 api 调用使用 //abc.api.hydrogen.com/ 而不是http://abc.api.hydrogen.com/
  • 我还尝试了一个拦截器来按照这里的建议设置 X-XSRF-TOKEN 标头,但是提取的令牌为空,因为它们尚未在浏览器中设置
0 投票
1 回答
765 浏览

laravel - nuxtjs 前端的 Laravel sanctum 范围

所以我试图在前端和后端之间建立某种策略,一切正常,但是我对为我的应用程序用户声明一个范围有点困惑

我确实意识到此代码当前不使用令牌,但是当我看到没有任何变化时

返回响应()->json($token, 200);


现在,我已经多次阅读https://laravel.com/docs/7.x/sanctum - 并且

返回我的用户很好,但是我不知道如何通过令牌(我假设?)在后端创建范围并在前端 nuxtjs 中访问该范围。

0 投票
2 回答
669 浏览

laravel - axios 的 VueJS SPA 动态 baseURL

我已经搜索和搜索,似乎无法找到这种模式。我认为自己是中级 Vue 开发人员,但是,后端是我的强项。我正在开发一款将被经销商贴上白标签的应用程序。虽然可以有多个构建,但最好避免这种构建。该设置是一个独立的 vue-cli SPA,连接到 Laravel api 后端并使用 Sanctum auth 包。所以我需要调用同一个域。问题:经销商将在他们自己的域上。问:是否有一种模式/解决方案可以为不同的域(其他项目将通过主题/样式表)动态加载配置(主要是 baseURL)。目前我有一些典型的条目:

IEaxios.defaults.baseURL = process.env.VUE_APP_API_BASE_URL

基本上,根据网站所服务的域,我想要一个动态/运行时配置。我觉得这已经解决了,但我似乎无法在某些方向上使用正确的搜索词,所以任何事情都有帮助。我尝试了几件事:

1)在js中解析,但似乎无法让它在过程中足够早地运行以生效?它似乎有效,但我无法让它“点击”

2) 使用当前域访问公共 API 端点并获取配置。同样,可以实现,但似乎无法将其正确注入 Vue 端?

任何资源、模式参考或一般指导都会非常感激,以避免仅仅为几个变量维护多个构建。也就是说,我认为这一切都没有太多开销,但也愿意告诉我我错了,需要多个构建。

最终结果

访问的网址是https://mydomaincom

然后baseURL = https://api.mydomiancom

访问过的网址https://resellerdomaincom

然后baseURL=https://api.resellerdomaincom

0 投票
2 回答
3274 浏览

vue.js - vue-cli 前端未从 Sanctum 设置 CSRF cookie

我正在使用 Vue 开发一个新的前端来访问我现有的 Laravel 7 应用程序,该应用程序使用 Sanctum 进行身份验证。

前端位于 app.example.com,后端移至 api.example.com。CORS 中间件和 Sanctum 已正确配置为允许 app.example.com,到目前为止一切顺利。

GET/sanctum/csrf-cookie看起来不错,但是,它似乎并没有真正设置 cookie,导致随后对 API 的请求返回 419。

控制台日志: 在此处输入图像描述

来自 /sanctum/csrf-cookie 的响应标头: 来自 /sanctum/csrf-cookie 的响应

devtools 中没有列出任何 cookie: 在此处输入图像描述

更新 1:之前没有注意到这一点;响应标题中每个旁边的警告图标Set-Cookie显示“此 set-cookie 的域属性对于当前主机 url 无效。”

0 投票
0 回答
569 浏览

php - 测试抛出 RequestGuard::viaRemember() 在第二个请求中不存在

我有一个看起来像这样的测试:

如您所见,第一次请求成功,并返回一个令牌,当我第二次请求时,Laravel 突然说该viaRemember方法不存在。

我不知道为什么不应该工作。

应该注意的是,我可以更改发布请求,第二个总是会像上面一样失败。

通过框架,错误发生在Illuminate\Session\Middleware\AuthenticateSession,其中第一个请求有一个web保护,第二个由于某种原因有weband airlock

在此处输入图像描述

0 投票
1 回答
1560 浏览

reactjs - Laravel 7 Sanctum:相同的域 (*.herokuapp.com) 但单独的 React SPA 得到 CSRF 令牌不匹配

我从这个论坛阅读了很多内容,并观看了很多关于如何使用 Sanctum Auth 将单独的 React/Vue SPA 连接到 Laravel API的教程视频,但没有一个解决方案对我有用。这是我的学校项目。

所以这就是我到目前为止所做的。

我创建了 2 个文件夹,一个用于 api,一个用于前端。我在 api 文件夹中安装了 Laravel,并在前端文件夹中安装了 React 应用程序。这两个都是 Git 初始化的,并且有自己的 Github 存储库。此外,它们都部署到 Heroku。

API

存储库:https://github.com/luchmewep/jarcalc_api

网站:https://jarcalc-api.herokuapp.com

前端

存储库:https://github.com/luchmewep/jarcalc_front

网站:https://jarcalculator.herokuapp.com

在本地,一切运行良好。我可以在前端的电子邮件和密码字段中设置错误消息,这意味着我已经收到并发送了laravel_sessionXSRF_TOKEN cookie。我还在一个虚拟仪表板上显示了经过身份验证的用户信息,因此在本地一切正常

在互联网上,我的两个应用程序都运行但不会相互通信。在官方文档中,它们必须至少在同一个域中,在这种情况下,它们是同一个域的子域,即.herokuapp.com

这是我为每个 Heroku 应用程序设置的环境变量。

API

SANCTUM_STATEFUL_DOMAINS = jarcalculator.herokuapp.com

(我尝试添加“SESSION_DRIVER=cookie”和“SESSION_DOMAIN=.herokuapp.com”但仍然无法正常工作!)

更新

发现 axios 在尝试 POST /login 请求时没有携带 XSRF-TOKEN。它会自动进行本地测试。

以下是相关代码:

api.tsx

登录.tsx

更新

“.herokuapp.com 包含在 Mozilla 基金会的公共后缀列表中。该列表用于多个浏览器的最新版本,例如 Firefox、Chrome 和 Opera,以限制 cookie 的范围。换句话说,在浏览器中支持该功能的应用程序将阻止 herokuapp.com 域中的应用程序为 *.herokuapp.com 设置 cookie。” https://devcenter.heroku.com/articles/cookies-and-herokuapp-com

本地饼干 在此处输入图像描述

已部署的 Cookie 在此处输入图像描述

说明:虽然 API 和前端都有.herokuapp.com,但这并不意味着它们在同一个 domain 上。上面 Heroku 的文章对此进行了解释。这意味着*.herokuapp.com之间的所有请求都被视为跨站点而不是相同站点

解决方案

由于laravel_session cookie 是由 axios 携带的,剩下的唯一问题就是xsrf-token cookie。要解决这个问题,必须购买一个域名并为每个域名设置子域名。就我而言,我的 React 前端现在位于www.jarcalculator.me而我的 Laravel 后端现在位于api.jarcalculator.me。由于无论部署在哪里,它们现在都是同一个站点(React 移动到 Github 页面,而 Laravel 在 Heroku),cookie 可以自动设置。

0 投票
1 回答
1262 浏览

laravel - Laravel Sanctum CSRF Coo​​kie 请求可选

我正在尝试将 Laravel Sanctum 用于我的 SPA。有一些来自 web.php 路由的基本主页,但axios与 SPA 的其他 API 交互位于 api.php 路由中,由auth:sanctum

从官方文档(https://laravel.com/docs/7.x/sanctum#spa-authenticating)中,它说我们必须在登录之前发送一个请求/sanctum/csrf-cookie来初始化 CSRF 保护。然而,我注意到即使没有登录,默认情况下 Laravel 已经初始化XSRF-TOKEN<app_name>_sessioncookie 到我的浏览器。我不需要通过初始化它,/sanctum/csrf-cookie并且我在登录 SPA 中的后续 API 请求仍然有效。后来我检查了https://laravel.com/docs/7.x/csrf#csrf-x-xsrf-token,它说 Laravel 将在每个响应中包含 CSRF 令牌是默认行为。

我的问题是,/sanctum/csrf-cookie初始化是否是可选的,并且axios使用 Laravel 返回的默认 CSRF 令牌是否安全?还是我做错了什么使我的 SPA 受到 CSRF 攻击?

0 投票
1 回答
372 浏览

vue.js - 如何使用 vuejs 路由保持 Laravel Auth 路由?

正如我在许多教程中看到的那样,我使用以下代码来使用 vue-router:

我正在使用sanctum并且我想继续使用Auth::routes()laravel 附带的,但它们不再工作了。

我想我必须{any}用其他东西改变模式,但究竟是什么?

最好的

0 投票
0 回答
302 浏览

laravel - Laravel Sanctum 用于制作 Api

我正在测试 Laravel Api 并使用 Sanctum 作为令牌,我遵循了 sanctum 的文档,但是当我使用 Route 作为

我收到的消息是

在邮递员。另外,我正在邮递员的身份验证中传递令牌(不记名令牌)。

在此处输入图像描述