并非完全SPA的应用程序中的身份验证(和授权)-Laravel Passport

时间:2019-12-16 12:53:54

标签: laravel vue.js authentication authorization laravel-passport

嗨,我正在用Larval和vue.js构建一个应用程序。此应用程序不是完全单页应用程序,而是 vue和Blade 的组合。

例如,仪表板或登录页面以及其他一些页面基于 SPA ,并且已通过vue完全实现。但是登录页面和其他页面是由 blades 创建的,其中可能使用了其中的vue组件。

在这种情况下,我的问题是关于身份验证 laravel护照是否适合此类情况?还是应该使用jwt或其他?因为我需要在两种类型的页面(基于Vue,基于Blade)上进行身份验证。几乎在每个页面上都完成了此操作。

另一方面,我使用 laravel-permission-Spatie 控制权限和角色。护照是否可以定义角色和权限并基于它们进行控制?我的意思是显示或隐藏元素和链接,访问某些部分或进行权限检查。

您提供了哪些资源来开始学习如何在此类应用中开发身份验证和授权

编辑:

我的问题也许有些含糊,所以我将解释更多。假设我们的网站分为三个部分:

  1. 第一部分包括登录页面,帖子显示,所有帖子的显示等等。此部分由 blade 实现,也可以使用vue组件。
  2. 第二部分是网站的用户个人资料页面,用户可以在其中编辑自己的信息,查看其帖子并进行编辑,查看注册的评论等。此部分是 SPA ,并且已通过Vue全面实施,只有登录的用户才能看到它。
  3. 第三部分是管理仪表板页面,该页面用于管理不同部分,应用设置等。此部分也是 SPA ,并且已通过Vue完全实施。在此部分中,仅允许具有管理员角色的用户,并且每个用户都可以根据赋予他们的权限来执行某些任务。这意味着,必须检查是否允许用户查看部分或执行特定任务。

路由也是由vue在用户个人资料和管理仪表板页面上执行的,操作由axios执行并将请求发送到以laravel编写的api。这三个部分都在相同的应用程序中。

问题是,在这种情况下应如何进行身份验证和授权? laravel-passport是否适合此任务?可以在laravel-passport中做这两种事情吗?例如,授权将在前端部分通过vue完成,应如何完成?是否可以将 laravel-passport和laravel-permission-Spatie 结合使用?还是我们根本需要它?也许是更笼统的问题:这种情况合理吗?

2 个答案:

答案 0 :(得分:0)

您使它变得太复杂了。如果要在刀片文件中调用vue组件,则根本不需要护照,但是如果前端与后端分开,则需要使用护照,因为您无权访问会话...

  

另一方面,我使用laravel-permission-Spatie来控制权限和角色。护照是否可以定义角色和权限并基于它们进行控制?

Passport不在乎您要使用什么样的权限和角色系统,您可以使用任何您想要的东西

答案 1 :(得分:0)

您可以使用中间方法,刀片登录/注册和Laravel护照中间件https://laravel.com/docs/6.x/passport#consuming-your-api-with-javascript

  

此Passport中间件会将laravel_token cookie附加到您的外发响应中。此cookie包含一个加密的JWT,Passport将使用该JWT来验证来自JavaScript应用程序的API请求。现在,您可以在不显式传递访问令牌的情况下向应用程序的API发出请求

Spatie权限非常适合管理权限和角色。您可以使用middleware保护api路由,也可以签入控制器。