我正在使用Laravel后端和VueJS2作为前端提供程序来构建SPA。 该应用程序将处理具有三种角色的用户:UserRole1,UserRole2和Admin。 当用户注册该应用程序时,他选择是否要成为Role1用户或Role2用户(admin-user由我直接在mysql数据库中设置)。 因此,在数据库中,有一个表“ users”和一个名为“ role”的字段:
当用户登录时,我想将他重定向到他基于角色的仪表板,所以我有3个不同的Vue组件和3条路由,并且我想阻止具有Role1(或Role2)的用户访问Role2或Admin。仪表板。显然,如果访客尝试访问仪表板,它将被重定向到登录页面,并且如果经过身份验证的用户尝试访问访客页(例如“注册”页面),它将被重定向到仪表板页面。
我想为每个路由设置一个“ userRole”参数,如下所示:
@WhereCond
我尝试使用Laravel Passport API,现在尝试使用JWT和websanova / vue-auth,因此在“登录”组件中有一个对“ api / auth / loign”路由的发布请求,将数据传递给AuthController @ authenticate方法,该方法返回json响应。但是vue-auth软件包不太适合我的需求,因此我认为可能有一个更有效的解决方案,但实际上我不知道如何编写适当的代码。我想知道您是否有一些想法。
答案 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');
});
然后您的流程如下:
/api/user
,并存储响应。如果混乱与第3步有关,那么this stackoverflow question可能会有所帮助。