Session 如何使用js SSR和SPA设置授权?

Session 如何使用js SSR和SPA设置授权?,session,cookies,authorization,single-page-application,server-side-rendering,Session,Cookies,Authorization,Single Page Application,Server Side Rendering,我想开发我自己的单页web应用程序(SPA),以应对当今高度流动的web开发世界。同时,我想使用页面呈现技术(SSR),将内置数据转换成html。但是,存在授权问题 假设用户之前已经登录到该帐户,正如我想象的那样,重新打开该站点: 第一个请求:客户端向前端服务器发出请求,并附上身份和授权数据(例如,用户id和令牌;唯一的选择是将它们保存在cookie中),前端服务器向api服务器发出请求,传输这些服务数据,然后api服务器提供关于用户和当前页面内容的信息(使用相同的json),前端服务器将其呈现

我想开发我自己的单页web应用程序(SPA),以应对当今高度流动的web开发世界。同时,我想使用页面呈现技术(SSR),将内置数据转换成html。但是,存在授权问题

假设用户之前已经登录到该帐户,正如我想象的那样,重新打开该站点:

  • 第一个请求:客户端向前端服务器发出请求,并附上身份和授权数据(例如,用户id和令牌;唯一的选择是将它们保存在cookie中),前端服务器向api服务器发出请求,传输这些服务数据,然后api服务器提供关于用户和当前页面内容的信息(使用相同的json),前端服务器将其呈现为一个完成的页面并将其交付给客户端
  • 后续请求:客户端直接寻址api服务器,传输相同(或在第一次请求后更新)的授权数据,接收json并独立处理
  • 实际上,我想继续讨论这个问题。我是否正确理解这种互动?你能做得不同/更好吗?例如,是否有工具允许将前端框架的组件用作MVC后端框架的组件,以便一台服务器在不需要请求的情况下进行渲染?还是一个统一的工具,包括前端和后端相同的编码来解决这些问题?我会马上说,我不想用JS编写后端

    我可以粗略地想象,当使用AngularJS(带有一个单页应用程序模块)和任何后端MVC框架时,您是如何处理一个请求的;虽然不会有一个完整的渲染,但搜索机器人不必等待我的第一次获取,因为数据最初会通过数据属性传递。但在本例中,我计划选择Svelte(Sapper)和RubyonRails作为堆栈,尽管我认为这并不重要

    谢谢你对这个问题的关注

    Are there tools that allow, for example, to use the components of the frontend framework as components of the MVC backend framework, so that one server does the rendering without unnecessary requests?
    
    如果这是您想要的,您可以使用webpacker在Rails中安装前端框架。之后,您将在rails项目中拥有一个文件夹,其中将包含您的苗条组件。然后在erb模板中导入苗条组件,并将数据作为道具传递

    我已经尝试过这种方法,但就我个人而言,我更喜欢通过API调用进行单独的前端和后端对话。然后在你的前端,如果你需要SSR,你需要像Sapper这样的东西。有了webpacker,您就不需要了(假设您主要使用Rails进行路由)

    如果您担心授权,那么实现起来并不困难。登录后,您可以将用户信息存储在本地存储器上,以供后续请求使用。当然,如果您使用webpacker安装,那么所有这些都是在Rails中完成的,因此更容易

    根据我的经验,使用webpacker一开始很容易,也很快,但将来你更可能会头疼。使用独立的后端和前端需要做更多的工作,特别是在开始时,但从长远来看更为流畅

    帮助我设置rails api和vue前端之间的身份验证


    因此,如果您希望将它们分开,只需将Rails作为API安装,我建议您使用Jbuilder构建JSON,并根据需要将其提供给前端。

    谢谢您的回答!是的,我还想从单一应用程序转变为分为前端和后端的应用程序,这在未来的平衡中很常见。如果你说这是正确的实现,将来不会有特别的问题,并且我通过前端服务器“转发”cookie(同一站点)正确地描述了这个方案,那么这是一个好消息。谢谢我已经更新了答案。如果它回答了你的问题,你可以接受它:)对不起,我对js SSR不够熟悉,无法接受这样的问题的答案,即使现在我只听到“这并不难”,所以让我们等待一个更符合这个主题的人接受你的答案。仅供参考,提出问题的人必须接受答案,不是其他人…我给了你一个链接来看看一个有效的例子。我希望您不是在等待有人发布所有代码来实现rails api和svelte fronted之间的身份验证。。基本上,您需要一个工具来集成rails和js前端。你得到的答案是webpacker