Laravel 5.7 + 空间权限 + JWT 授权
Laravel 5.7 + Spatie Permissions + JWT auth
我正在使用 Laravel 5.7 设置 REST API。为了验证身份验证,我 JWT-auth and for permissions and roles I use Spatie.
我的问题:当我尝试 link 一个用户角色时,我收到以下错误
Spatie \ Permission \ Exceptions \ RoleDoesNotExist
There is no role named admin.
角色确实存在于数据库中:
这就是我尝试为用户分配角色的方式:
$user = User::findOrFail(1);
$user->assignRole('admin');
因为我是 Laravel 的新手,我不确定它是否相关,但是设置 JWT 我不得不将 config/auth.php
中的守卫驱动程序更改为 jwt
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
我看不出我做错了什么。我添加了角色,然后尝试将角色添加到用户。
检查您的应用命名空间。如果您从 App
更新它,请务必在 config/auth.php
.
更新它
另一方面,如果您没有更新 App
命名空间,请尝试清除缓存并重新设置数据库表。
php artisan config:cache
php artisan cache:clear
另外 检查用户模型是否有 protected $guard_name = 'api';
。
希望这对您有所帮助。干杯!
我假设您已经手动将角色添加到数据库中。角色被缓存,如果您不使用内置的创建方法,它会导致问题。
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);
您将需要使用 php artisan cache:clear
手动清除缓存。
更好的方法是使用播种器(对于永久角色)或Tinker到运行创建角色和权限的代码,这将触发缓存被清除.
Guard 已从 Web 更改为 api 但仍尝试从数据库中查找 Web
分配这样的角色。
$roleToAssign = Role:: findByName('administrator', 'api');
$user->assignRole($roleToAssign);
如果 none 个其他答案解决了您的问题
检查您是否正在使用队列
如果是这样
重新启动队列
我正在使用 Laravel 5.7 设置 REST API。为了验证身份验证,我 JWT-auth and for permissions and roles I use Spatie.
我的问题:当我尝试 link 一个用户角色时,我收到以下错误
Spatie \ Permission \ Exceptions \ RoleDoesNotExist
There is no role named admin.
角色确实存在于数据库中:
这就是我尝试为用户分配角色的方式:
$user = User::findOrFail(1);
$user->assignRole('admin');
因为我是 Laravel 的新手,我不确定它是否相关,但是设置 JWT 我不得不将 config/auth.php
中的守卫驱动程序更改为 jwt
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
我看不出我做错了什么。我添加了角色,然后尝试将角色添加到用户。
检查您的应用命名空间。如果您从 App
更新它,请务必在 config/auth.php
.
另一方面,如果您没有更新 App
命名空间,请尝试清除缓存并重新设置数据库表。
php artisan config:cache
php artisan cache:clear
另外 检查用户模型是否有 protected $guard_name = 'api';
。
希望这对您有所帮助。干杯!
我假设您已经手动将角色添加到数据库中。角色被缓存,如果您不使用内置的创建方法,它会导致问题。
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);
您将需要使用 php artisan cache:clear
手动清除缓存。
更好的方法是使用播种器(对于永久角色)或Tinker到运行创建角色和权限的代码,这将触发缓存被清除.
Guard 已从 Web 更改为 api 但仍尝试从数据库中查找 Web 分配这样的角色。
$roleToAssign = Role:: findByName('administrator', 'api');
$user->assignRole($roleToAssign);
如果 none 个其他答案解决了您的问题
检查您是否正在使用队列 如果是这样 重新启动队列