使用 Laravel 和 VueJS 配置一个完全分离的前端和后端 Web 应用程序

Har*_*rry 2 php rest laravel vue.js

我计划使用 Laravel 作为后端 REST API 和 Vue.js 前端来创建一个多页 Web 应用程序来使用这个 API。

需要明确的是,我对具体如何设置的代码片段不感兴趣,除非一些有助于可视化架构。

我想知道的是如何以完全分离的方式部署这种“拆分堆栈”。IE 堆栈不共享代码库,而是存储在完全独立的存储库中。

我对 jQuery 之外的 JavaScript 框架不是很熟悉,所以我认为我的理解不足主要在于 Vue.js 部门。一些特别突出的问题是:

Vue.js 应用程序可以由 Web 服务器托管以提供静态 HTML 文件吗?如果可以,哪个兼容?

前端和后端服务是否可以在同一台服务器上运行,例如在不同的端口上运行,对此有什么最佳实践?

以这种方式运行 Web 应用程序对登录身份验证有何影响,我是否应该考虑在前端和后端之间创建某种 OAuth 身份验证?

在阅读了许多博客文章后,很明显这种架构是可行的,但我正在努力寻找有关如何将其配置为完全独立的详细信息。

工具和技术在这里不一定重要,但对 Vue.js 和 Laravel 的任何细节表示赞赏。

Mar*_*ons 5

我有一个带有 ExpressJS 后端的 VueJS 前端设置,这与您所说的非常相似。是的,这是完全可能的。因此,让我们分别看看您的每个问题。

Vue.js 应用程序可以由 Web 服务器托管以提供静态 HTML 文件吗?如果可以,哪个兼容?

是的,当您运行 VueJS 时,您可以将build其作为静态应用程序或serveNodeJS 应用程序。

请参阅此处的 Vue CLI 3 文档的部署部分。它解释了如何使用/dist目录以您想要的方式为 VueJS 应用程序提供服务。

前端和后端服务是否可以在同一台服务器上运行,例如在不同的端口上运行,对此有什么最佳实践?

我最近在此处发布了一个示例,说明如何在同一台服务器上托管前端和 API 。(包括编码示例和说明)。这个答案引用 ExpressJS 作为 API,但原理是相同的。真的,只需让您的前端监听端口 80,并让您的 API 在不同的、未使用的端口(即:8081)上运行。

以这种方式运行 Web 应用程序对登录身份验证有何影响,我是否应该考虑在前端和后端之间创建某种 OAuth 身份验证?

我在后端处理所有身份验证。基本上,在 Vue Router 中,您可以设置一个secure参数。然后router.beforeEach((to,from,next) => {});在最后声明一个调用。然后,此调用应检查用户是否具有有效的登录令牌,并在使用要求用户登录的 URL 设置 cookie 后将其重定向到应用程序登录页面,以便在登录后可以将其发送回应用程序登录页面。

在我们的例子中,我们将用户重定向到 VueJS Route /saml/login。这/saml/login成分。该组件调用 API 并返回用户应该重定向到登录的地址。在我们的例子中,它是 API(在同一台服务器上运行,但端口不同 [请参阅上面的答案]),www.example.com:8081/api/v1/saml_login。然后它与 IDP 一起工作并接收令牌和用户数据。这也是您执行 ACS 功能(配置用户、更新登录时间或用户数据等)的地方。收到令牌后,将其放入 cookie 或其他占位符中,以便它可以用于验证最初验证用户时存储在数据库中的令牌。(最佳做法是在您的令牌上设置到期时间)。然后,用户被重定向到存储在 cookie 中的 url,该 url 让我们知道他们被要求从哪里登录,这样他们就可以查看他们的内容而无需再次查找。(如果你愿意,很高兴分享代码)

  • 作为补充说明,您所谈论的框架类型称为 MVC 框架。模型-视图-控制器,其中模型是你的数据库,视图是前端,控制器是 API。该框架的全部目的是分离应用程序的逻辑和代码库,本质上使单个 API 能够提供多种前端体验(Web、本机应用程序、第 3 方连接等),而无需让它们直接访问模型(数据库)。 (2认同)