SPA中的Laravel 5.8和VueJS2身份验证

时间:2019-03-13 15:40:02

标签: php laravel authentication vue.js vuejs2

我正在使用Laravel后端和VueJS2作为前端提供程序来构建SPA。 该应用程序将处理具有三种角色的用户:UserRole1,UserRole2和Admin。 当用户注册该应用程序时,他选择是否要成为Role1用户或Role2用户(admin-user由我直接在mysql数据库中设置)。 因此,在数据库中,有一个表“ users”和一个名为“ role”的字段:

  • UserRole1 =>“角色” = 1;
  • UserRole2 =>“角色” = 2;
  • Admin =>“ role” = 7。

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

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

@WhereCond

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

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是定义一个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. 正常登录。
  2. 立即调用/api/user,并存储响应。
  3. 使用存储的角色路由到SPA中的正确视图。

如果混乱与第3步有关,那么this stackoverflow question可能会有所帮助。