问题标签 [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.
laravel-7 - 如何在包开发中使用 Laravel/sanctum
我尝试在自定义 Laravel 包中使用 Laravel/Sanctum。就像在默认的 Laravel 应用程序中一样,我将它添加到了 composer 文件中,添加了迁移并在路由文件中进行了设置。
出现下一条错误消息:
“未定义授权守卫[圣所]。”
我希望甚至可以在另一个包中使用圣所?
Composer.json 文件:
路线文件:
服务提供者
angular - 未使用 Laravel Sanctum 和 Angular 为跨域请求设置 CSRF Cookie
概述
我有一个本地托管在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 标头,但是提取的令牌为空,因为它们尚未在浏览器中设置
laravel - nuxtjs 前端的 Laravel sanctum 范围
所以我试图在前端和后端之间建立某种策略,一切正常,但是我对为我的应用程序用户声明一个范围有点困惑
我确实意识到此代码当前不使用令牌,但是当我看到没有任何变化时
返回响应()->json($token, 200);
现在,我已经多次阅读https://laravel.com/docs/7.x/sanctum - 并且
返回我的用户很好,但是我不知道如何通过令牌(我假设?)在后端创建范围并在前端 nuxtjs 中访问该范围。
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
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 的响应标头:
更新 1:之前没有注意到这一点;响应标题中每个旁边的警告图标Set-Cookie
显示“此 set-cookie 的域属性对于当前主机 url 无效。”
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_session和XSRF_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
说明:虽然 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 可以自动设置。
laravel - Laravel Sanctum CSRF Cookie 请求可选
我正在尝试将 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>_session
cookie 到我的浏览器。我不需要通过初始化它,/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 攻击?
vue.js - 如何使用 vuejs 路由保持 Laravel Auth 路由?
正如我在许多教程中看到的那样,我使用以下代码来使用 vue-router:
我正在使用sanctum
并且我想继续使用Auth::routes()
laravel 附带的,但它们不再工作了。
我想我必须{any}
用其他东西改变模式,但究竟是什么?
最好的