4

我正在使用 Laravel 5.7 设置 REST API。为了验证身份验证,我使用JWT-auth并且对于权限和角色,我使用Spatie

我的问题:尝试将角色链接到用户时出现以下错误

Spatie \ Permission \ Exceptions \ RoleDoesNotExist
There is no role named admin.

该角色确实存在于数据库中: 在此处输入图像描述

这就是我尝试为用户分配角色的方式:

$user = User::findOrFail(1);
$user->assignRole('admin');

由于我是 Laravel 的新手,我不确定它是否相关,但是设置 JWT 我必须将警卫的驱动程序更改config/auth.phpjwt

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

我看不出我做错了什么。我添加了角色,然后尝试将角色添加到用户。

4

4 回答 4

5

检查您的应用命名空间。如果您从 更新它App,请务必在config/auth.php.

另一方面,如果您没有更新App命名空间,请尝试清除缓存并重新设置数据库表的种子。

php artisan config:cache
php artisan cache:clear

如果你有的话,还要protected $guard_name = 'api';检查用户模型。

希望这可以帮助。干杯!

于 2018-11-28T14:43:01.753 回答
0

我假设您已手动将角色添加到数据库中。角色被缓存,如果您不使用内置的 create 方法,它会导致问题。

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);

来自 GitHub 文档

您将需要使用 手动清除缓存php artisan cache:clear

更好的方法是使用播种器(用于永久角色)或Tinker运行代码以创建角色和权限,这将触发缓存被清除。

于 2018-11-28T15:23:46.060 回答
0

如果其他答案都没有解决您的问题

检查您是否正在使用队列,如果是,请重新启动队列

于 2020-07-06T16:34:00.587 回答
0

Guard 已从 web 更改为 api,但仍尝试从数据库中查找 web 分配这样的角色。

$roleToAssign = Role:: findByName('administrator', 'api');
$user->assignRole($roleToAssign);

#关联

于 2019-12-25T06:33:30.837 回答