首页 文章

Laravel 5.7 Spatie Permissions JWT auth

提问于
浏览
1

我正在使用Laravel 5.7设置REST API . 要验证身份验证I JWT-auth,对于权限和角色,我使用Spatie .

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

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

该角色确实存在于数据库中:
enter image description here

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

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

因为我'm new to Laravel I'我不确定它是否相关,但设置JWT我必须将 config/auth.php 中的后卫的驱动程序更改为 jwt

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

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

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

2 回答

  • 1

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

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

    php artisan config:cache
    php artisan cache:clear
    

    Also 如果您有 protected $guard_name = 'api'; ,请检查用户模型 .

    希望这可以帮助 . 干杯!

  • 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运行代码来创建角色和权限,这将触发清除缓存 .

相关问题