当前位置: 首页 > 知识库问答 >
问题:

SPA中的Laravel 5.8和VueJS2身份验证

邢飞昂
2023-03-14

我正在建立一个水疗中心,后端为Laravel,前端为VueJS2。该应用程序将处理具有3种角色的用户:UserRole1、UserRole2和Admin。当用户注册应用程序时,他选择是希望成为Role1用户还是Role2用户(admin用户由我直接在mysql数据库中设置)。因此,在数据库中有一个表“users”,其中有一个名为“role”的字段:

  • 用户角色1=

当用户登录时,我想将其重定向到基于角色的仪表板,因此我有3个不同的Vue组件和3个路由,我想阻止具有Role1(或Role2)的用户访问Role2或Admin仪表板。显然,如果来宾尝试访问仪表板,它将被重定向到登录页面,如果经过身份验证的用户尝试访问来宾页面(如注册页面),它将被重定向到仪表板页面。

我想为每个路由设置一个"userRole"参数,如下所示:

    {
        path: '/app/userRole1/Dashboard',
        component: DashboardUserRole1,
        name: 'dashboardRole1',
        meta: {
            title: 'Dashboard Role1',
            userRole: 1
        },
    },
    {
        path: '/app/userRole2/Dashboard',
        component: DashboardUserRole2,
        name: 'dashboardRole2',
        meta: {
            title: 'Dashboard Role2',
            userRole: 2
        },
    },
    {
        path: '/app/Admin/Dashboard',
        component: DashboardAdmin,
        name: 'dashboardAdmin',
        meta: {
            title: 'Dashboard Admin',
            userRole: 7
        },
    },

我已经尝试了Laravel Passport API,现在我正在尝试JWT和websanova/vue-auth,所以在“登录”组件中有一个对“api/auth/loign”路由的发布请求,该请求将数据传递给AuthController@authenticate方法,该方法返回一个JSON响应。但是vue-auth包不太适合我的需求,所以我认为可以有一个更有效的解决方案,但实际上我不知道如何编写合适的代码。我想知道你是否有一些想法。

共有1个答案

申高卓
2023-03-14

一个简单的解决方案是定义一个api路由来检索关于已验证用户的信息。Laravel默认的api.php路由文件包含以下路由:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

您可以修改它以包含应用程序需要了解的关于用户的任何信息,以便处理路由逻辑:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user()->load('roles');
});

然后你的流程看起来像这样:

  1. 正常登录

如果混淆是围绕步骤3,那么这个stackoverflow问题可能会有所帮助。

 类似资料:
  • 这可能涉及到会话cookie、服务器端会话存储以及一些会话APIendpoint,通过身份验证的web UI可以访问这些endpoint来获取当前用户信息,以帮助个性化或甚至确定客户端的角色/能力。服务器仍将强制执行保护对数据访问的规则当然,UI将仅仅使用这些信息来定制体验。 将其视为使用公共API的任何第三方客户端,并使用类似于OAuth的某种令牌系统进行身份验证。客户端UI将使用此令牌机制来验

  • 我已经为这个问题纠结了几个小时:我有一个用Angular编写的单页应用程序,它与DjangoREST后端通信。我试图用会话cookie实现一个auth fonction。我的看法是: 1/向未登录的访问者显示登录页面 2/使用凭据发送到URL/登录 3/获取一个“sessionid”cookie,并将用户记录在服务中 4/将vistor重定向到保留的内容,并使用get&post访问cookie中的

  • 我有一个API服务器(资源服务器)和多个应用程序、Web GUI(SPA)和一个桌面客户端,也许还会有更多。除了超文本传输协议之外,我还想为我的API服务器使用openid-connect基本身份验证。应该可以配置使用哪个openid提供商。我自己的,facebook,google...我只想做身份验证,我不需要他们的API。我只需要一些个人资料数据,如电子邮件或名字。 比方说,我已经将googl

  • 我正在尝试构建一个带有Azure功能的单页应用程序,这样当用户想要访问我的网站时,他们可以访问我的Azure功能的url,这将是一个定制域,比如www.contoso.com 我的问题是,我如何才能为用户发起登录过程,就像在正常的网站中一样。在一个普通的asp网站中,visual studio提供了对此进行集成的选项,但我如何对azure函数进行同样的操作呢?

  • 问题内容: 确保GWT + Tomcat应用程序执行身份验证和授权的最佳策略是什么? 问题答案: 有两种基本策略: 确保入口点; 保护远程服务。 最简单的方法是使用常规的Web应用程序安全工具来限制对GWT生成的html / js文件的访问: 春季安全; web.xml约束。 这样可以让您拥有eg 和。 保护远程服务 如果上述解决方案还不够,您可以进行更深入的研究。我已经通过Spring Secu

  • 问题内容: 如何在Elasticsearch中定义安全性访问?我有elasticsearch-head插件,但是您的访问不需要任何安全性。 问题答案: 不再积极支持此答案中提到的插件。 elasticsearch中没有内置的访问控制。因此,您需要设置一个反向代理(这是一个博客文章,介绍如何设置nginx),使用第三方的Elasticsearch插件之一,例如https://github.com/A